跳至主要內容

504. 七进制数


504. 七进制数

🟢   🔖  数学  🔗 力扣open in new window LeetCodeopen in new window

题目

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,记录每次的余数,最后反转余数序列即可完成转换。

  1. 处理特殊情况:如果 num0,直接返回 "0"
  2. 记录符号:如果 num 是负数,先记录符号,然后将其转换为正数,最后在结果中加上符号。
  3. 进行进制转换
    • 用一个循环将 num 不断除以 7,记录每次的余数。
    • 将余数拼接到结果中,注意结果是从低位到高位生成的。
  4. 返回结果:将生成的数字序列反转,并加上符号。

复杂度分析

  • 时间复杂度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;
};