每日一题-20240122

题目描述

504. 七进制数

给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。

示例 1:

1
2
输入: num = 100
输出: "202"

示例 2:

1
2
输入: num = -7
输出: "-10"

提示:

  • -107 <= num <= 107

解题思路

除 7 取余法,实现可采用迭代或递归。

注意负数进制转换的差异,这里的做法是将负数转换为整数计算最后加上符号位。

代码实现

递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class Solution504Case1 {

/**
* 思路:除 x 取余法
* 注意负数进制转换的差异,这里的做法是将负数转换为整数计算最后加上符号位
*
* @param num
* @return {@link String }
* @author Forest Dong
* @date 2024/01/24 21:14
*/
public static String convertToBase7(int num) {
StringBuilder sb = new StringBuilder();
convert(Math.abs(num), sb);
if (num < 0) {
sb.append("-");
}
return sb.reverse().toString();
}

private static void convert(int num, StringBuilder sb) {
if (7 > num) {
sb.append(num);
return;
}
sb.append(num % 7 + "");
convert(num / 7, sb);
}

public static void main(String[] args) {
Integer.toString(1, 7);
System.err.println(convertToBase7(-8));
}
}

迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Solution504Case2 {
public static String convertToBase7(int num) {
if (0 == num) {
return "0";
}
boolean negative = num < 0;
StringBuilder sb = new StringBuilder();
num = Math.abs(num);
while (num > 0) {
sb.append(num % 7);
num = num / 7;
}
if (negative) {
sb.append("-");
}
return sb.reverse().toString();
}

public static void main(String[] args) {
System.err.println(convertToBase7(-8));
}
}