【LeetCode笔记 - 每日一题】504. 七进制数(Java、数学、字符串)

0307

504. 七进制数

数学、字符串 easy

题目

10 进制 转化为 7 进制,并以字符串形式输出。

示例

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

思路 & 代码

  1. 类似十进制转换二进制方法,每次取余、确定的是最低位。StringBuilderappend() 是将字符添加到末尾,所以最后要将结果反转,对于负数要添加负号。
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计算完成区分不开,就会返回""不符题意
  1. 大佬题解,宫水三叶(开打赏了,支持支持~)

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值