504. 七进制数
504. 七进制数
题目
Given an integer num
, return a string of its base 7 representation.
Example 1:
Input: num = 100
Output: "202"
Example 2:
Input: num = -7
Output: "-10"
Constraints:
-10^7 <= num <= 10^7
题目大意
给定一个整数 num
,将其转化为 7 进制 ,并以字符串形式输出。
示例 1:
输入: num = 100
输出: "202"
示例 2:
输入: num = -7
输出: "-10"
提示:
-10^7 <= num <= 10^7
解题思路
我们可以用进制转换的基本方法来解决这个问题:通过循环将 num
不断除以 7
,记录每次的余数,最后反转余数序列即可完成转换。
- 处理特殊情况:如果
num
是0
,直接返回"0"
。 - 记录符号:如果
num
是负数,先记录符号,然后将其转换为正数,最后在结果中加上符号。 - 进行进制转换:
- 用一个循环将
num
不断除以7
,记录每次的余数。 - 将余数拼接到结果中,注意结果是从低位到高位生成的。
- 用一个循环将
- 返回结果:将生成的数字序列反转,并加上符号。
复杂度分析
- 时间复杂度:
O(log₇(num))
,转换过程需要对数num
进行多次除法操作,次数取决于num
的位数。 - 空间复杂度:
O(log₇(num))
,每次循环中,res
会新增一位字符,最终存储的字符串长度等于结果的位数。
代码
/**
* @param {number} num
* @return {string}
*/
var convertToBase7 = function (num) {
if (num === 0) return '0'; // 特殊情况:输入为 0
const isNegative = num < 0; // 记录符号
num = Math.abs(num); // 转为正数
let res = '';
// 进行进制转换
while (num > 0) {
res = (num % 7) + res; // 记录余数
num = Math.floor(num / 7); // 除以 7
}
// 将结果反转并拼接为字符串
return (isNegative ? '-' : '') + res;
};