Easy
题目描述
给定一个整数 num,返回其七进制数字符串表示。
示例 1:
输入: num = 100
输出: "202"
示例 2:
输入: num = -7
输出: "-10"
提示:
-10^7 <= num <= 10^7
解题思路
解题思路
这是一个经典的进制转换问题。我们需要将十进制数转换为七进制数。
方法一:除法取余法(推荐)
核心思想是不断除以7并记录余数,然后将余数倒序组合:
- 特殊处理:如果
num为 0,直接返回 “0” - 记录符号:如果
num为负数,先记录负号,然后取绝对值处理 - 循环处理:不断除以 7,将余数加到结果字符串的前面
- 返回结果:如果原数为负,在结果前加上负号
方法二:递归法
也可以用递归的方式实现,但空间复杂度会稍高一些。
方法三:利用内置函数
某些语言提供了进制转换的内置函数,但为了展示算法思路,这里主要实现手动转换。
时间复杂度为 O(log₇n),因为需要进行 log₇n 次除法运算。空间复杂度为 O(log₇n),用于存储结果字符串。
代码实现
class Solution {
public:
string convertToBase7(int num) {
if (num == 0) return "0";
bool negative = num < 0;
if (negative) num = -num;
string result = "";
while (num > 0) {
result = to_string(num % 7) + result;
num /= 7;
}
return negative ? "-" + result : result;
}
};
class Solution:
def convertToBase7(self, num: int) -> str:
if num == 0:
return "0"
negative = num < 0
if negative:
num = -num
result = ""
while num > 0:
result = str(num % 7) + result
num //= 7
return "-" + result if negative else result
public class Solution {
public string ConvertToBase7(int num) {
if (num == 0) return "0";
bool negative = num < 0;
if (negative) num = -num;
string result = "";
while (num > 0) {
result = (num % 7).ToString() + result;
num /= 7;
}
return negative ? "-" + result : result;
}
}
var convertToBase7 = function(num) {
if (num === 0) return "0";
let isNegative = num < 0;
num = Math.abs(num);
let result = "";
while (num > 0) {
result = (num % 7) + result;
num = Math.floor(num / 7);
}
return isNegative ? "-" + result : result;
};
复杂度分析
| 复杂度类型 | 大小 |
|---|---|
| 时间复杂度 | O(log₇n) |
| 空间复杂度 | O(log₇n) |