LeetCode - 504 - 七进制数(base-7)

mac2026-02-12  12

一 目录

不折腾的前端,和咸鱼有什么区别

目录一 目录二 前言三 解题及测试四 LeetCode Submit五 解题思路六 进一步思考

二 前言

难度:简单 涉及知识:数学 题目地址:https://leetcode-cn.com/problems/base-7/ 题目内容: 给定一个整数,将其转化为7进制,并以字符串形式输出。 示例 1: 输入: 100 输出: "202" 示例 2: 输入: -7 输出: "-10" 注意: 输入范围是 [-1e7, 1e7] 。

三 解题及测试

小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。

LeetCode 给定函数体: /** * @param {number} num * @return {string} */ var convertToBase7 = function(num) { };

根据上面的已知函数,尝试破解本题吧~

确定了自己的答案再看下面代码哈~

index.js

/** * @name 七进制数 * @param {number} num * @return {string} */ const convertToBase7 = (num) => { // 如果是 0 的情况 if (num === 0) { return '0'; } let plusMinus = 1; if (num < 0) { plusMinus = -1; num = -num; } let result = ''; while (num > 0) { result = Math.floor(num % 7) + result; num = Math.floor(num / 7); } return plusMinus > 0 ? String(result) : String(-result); }; // const num = -7; const num = 100; console.log(convertToBase7(num));

node index.js 返回:

202

四 LeetCode Submit

Accepted * 241/241 cases passed (64 ms) * Your runtime beats 87.06 % of javascript submissions * Your memory usage beats 31.11 % of javascript submissions (33.8 MB)

五 解题思路

心情好的人可能每天都是 lucky day~

今天看到这题,要不是 LeetCode 早就出了,我还以为它监控我的生活!

是的,前几天刚写了下十进制和二进制的转换问题,所以直接破解:

/** * @name 七进制数 * @param {number} num * @return {string} */ const convertToBase7 = (num) => { // 如果是 0 的情况 if (num === 0) { return '0'; } let plusMinus = 1; if (num < 0) { plusMinus = -1; num = -num; } let result = ''; while (num > 0) { result = Math.floor(num % 7) + result; num = Math.floor(num / 7); } return plusMinus > 0 ? String(result) : String(-result); };

然后提交:

Accepted * 241/241 cases passed (64 ms) * Your runtime beats 87.06 % of javascript submissions * Your memory usage beats 31.11 % of javascript submissions (33.8 MB)

这题就这么解了。

最后说说逻辑:

我们需要明白的是,一个 10 进制的 1234,如何用 10 进制的话来表示?

1234 % 10 = 4(个位数) 123 % 10 = 3(十位数) 12 % 10 = 2(百位数) 1 % 10 = 1(千位数)

下一步的被除数 = 上一步被除数 / 10

看到这里,我们应该有所体会了,那么再尝试转换为 7 进制:

1234 % 7 = 2(个位数) 176 % 7 = 1(十位数) 25 % 7 = 4(百位数) 3 % 7 = 3(千位数)

下一步的被除数 = 上一步被除数 / 7

这样,小伙伴们应该清楚进制转换的一个机制了,那么下面就好讲了:

如果是 0,直接返回字符串 '0' 如果不是 0,那么先将其转换成正数,然后将其转换为 7 进制,最后根据一开始的正负,添加上符号即可。

六 进一步思考

看到这里,想必小伙伴们还没过瘾,所以咱们抽取下,写完善下:

/** * @name 十进制转十六以内任意进制 * @param {number} 需要转换的数 * @param {number} 需要转换到什么进制 */ const decimalToArbitrary = (num, ascii) => { num = Math.abs(num); const hexAdecimal = '0123456789abcdef'; let result = ''; while (num > 0) { result = hexAdecimal[Math.floor(num % ascii)] + result; num = Math.floor(num / ascii); } return String(result) || '0'; } /** * @name 七进制数 * @param {number} num * @return {string} */ const convertToBase7 = (num) => { const result = decimalToArbitrary(num, 7); return num > 0 ? String(result) : String(-result); }; // const num = -7; const num = 100; console.log(convertToBase7(num));

Submit 试试:

Accepted * 241/241 cases passed (60 ms) * Your runtime beats 92.94 % of javascript submissions * Your memory usage beats 17.78 % of javascript submissions (33.9 MB)

完美,不仅解决了 7 进制的问题,十进制转十六以内任意进制随便用~


不折腾的前端,和咸鱼有什么区别!

jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。

浪子神剑 会每天更新面试题,以面试题为驱动来带动大家学习,坚持每天学习与思考,每天进步一点!

扫描上方二维码,关注 jsliang 的公众号(左)和 浪子神剑 的公众号(右),让我们一起折腾!

jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。

最新回复(0)