LeetCode#504. 七进制数

82 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情

一、题目描述:

504. 七进制数

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

示例 1:

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

示例 2:

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

提示:

  • -10^7 <= num <= 10^7

二、思路分析:

首先需要清楚进制之间的转化方式,以十进制转化为二进制为例:假设将十进制100转为二进制
100/2=50......0;
50/2=25......0;
25/2=12.....1;
12/2=6......0;
6/2=3......0;
3/2=1......1;
1/2=0......1;
然后将余数从下往上读就是结果,即十进制100对应的二进制为1100100;
本题中为带符号的数,先转为正数,在进行上述操作,最后将符号加上即可。
ps:上述中,在倒数第二步时,商为1,已经小于要转的进制,可以不用进行后续操作,以下代码中体现。

三、AC 代码:

class Solution {
    public String convertToBase7(int num) {
    	return covertBase(num, 7);
    }
    
    //进制转化
    public String covertBase(int num, int base) {
    	int temp = Math.abs(num);
    	StringBuilder sb = new StringBuilder();
    	while(temp >= base) {
    		int digit = temp % base;
    		sb.append(digit);
    		temp /= base;
    	}
    	sb.append(temp);
    	if(num < 0) {
    		sb.append("-");
    	}
    	return sb.reverse().toString();
    }
}

四、总结:

使用用最高进制值一份份计算,不涉及任何算法
乘数法是比较耗时,尤其除法,翻了翻题解,好像都是用了除法操作。
按照进制算法,可以用权位值,一份份的计算,速度必须会比除法快的多

范文参考:

504.七进制数(简单):C语言实现 简单for循环 详细注释 - 七进制数 - 力扣(LeetCode)

一开始想的是设flag=1,若num为负数,那么flag=-1,num=-num,最后在乘以flag。后来发现一个是字符串,一个是整形,稍微修改了一下就可以了。 - 七进制数 - 力扣(LeetCode)

【Cyanogen】2022年开始写题解的第六十六天 - 七进制数 - 力扣(LeetCode)