【数学】力扣504:七进制数

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

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

进制转换类型的题,通常是利用除法和取模(mod)来进行计算,同时也要注意一些细节,如负数和零。
如果输出是数字类型而非字符串,则也需要考虑是否会超出整数上下界。

class Solution:
    def convertToBase7(self, num: int) -> str:
        # num 为 0 时的情况
        if num == 0:
            return "0"
        # num为负数的情况
        # num = abs(num)
        if num < 0:
            num = -num
        res = "" # 放在循环外面
        while num:
            '''
            res = str(num % 7) + res
            num = num // 7
            '''
            a, b = num // 7, num % 7
            res = str(b) + res
            num = a
        return "-" + res if num < 0 else res # 给负数的num加上负号

时间复杂度:O(log∣num∣),其中 ∣num∣ 表示 num 的绝对值。循环中最多做O(log∣num∣) 次除法。
空间复杂度:O(log∣num∣)。字符数组的长度最多为O(log∣num∣)。部分语言可以直接修改字符串,空间复杂度为 O(1)。

可以用python特殊方法解决数字转字符串问题:

class Solution:
    def convertToBase7(self, num: int) -> str:
        if num == 0:
            return "0"
        negative = num < 0
        num = abs(num)
        digits = []
        while num:
            digits.append(str(num % 7))
            num //= 7
        if negative:
            digits.append('-')
        return ''.join(reversed(digits))

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/base-7/solution/qi-jin-zhi-shu-by-leetcode-solution-cl2v/

一行代码:

class Solution:
    def convertToBase7(self, num: int) -> str:
        return ("-" if num < 0 else "") + self.convertToBase7(d) + str(a % 7) if (d := (a := abs(num)) // 7) > 0 else str(num)

作者:himymBen
链接:https://leetcode-cn.com/problems/base-7/solution/kao-gu-tie-ge-lao-ti-jie-de-jian-ji-ban-16mtv/
posted @ 2022-05-07 22:42  Vonos  阅读(236)  评论(0)    收藏  举报