0307
数学、字符串 easy
题目
10 进制 转化为 7 进制,并以字符串形式输出。
示例
输入: num = 100
输出: "202"
输入: num = -7
输出: "-10"
思路 & 代码
- 类似十进制转换二进制方法,每次取余、确定的是最低位。
StringBuilder
的append()
是将字符添加到末尾,所以最后要将结果反转,对于负数要添加负号。
class Solution {
public String convertToBase7(int num) {
if (num == 0) return "0"; // 特殊情况处理
StringBuilder sb = new StringBuilder();
boolean neg = num < 0 ? true : false; // 因为会翻转,所以负号最后加
num = Math.abs(num); // 用绝对值统一进行计算
while (num > 0) {
int rmd = num % 7; // 余数
sb.append(rmd);
num /= 7;
}
if (neg) sb.append('-'); // 此时加负号,翻转后到字符串开头
return sb.reverse().toString(); // 翻转,返回字符串
}
}
执行用时:1 ms, 在所有 Java 提交中击败了76.60%的用户
内存消耗:38.8 MB, 在所有 Java 提交中击败了22.48%的用户
通过测试用例:241 / 241
反思:
- 一开始没注意到”0“的情况,这样
输入0
和计算完成
区分不开,就会返回""
不符题意
- 大佬题解,宫水三叶(开打赏了,支持支持~)
用do..while
循环避免了判断0,flag
直接用逻辑表达式定义,简洁优美,学到了!
class Solution {
public String convertToBase7(int n) {
boolean flag = n < 0;
if (flag) n = -n;
StringBuilder sb = new StringBuilder();
do {
sb.append(n % 7);
n /= 7;
} while (n != 0);
sb.reverse();
return flag ? "-" + sb.toString() : sb.toString();
}
}
作者:AC_OIer
链接:https://leetcode-cn.com/problems/base-7/solution/gong-shui-san-xie-jian-dan-mo-ni-ti-by-a-2759/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。