LeetCode:258(Python)—— 各位相加(简单)

各位相加

概述:给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。

输入: num = 38
输出: 2 

输入: num = 0
输出: 0

方法一:字符串+循环

思路:首先把 int 转为 str,然后对字符串进行循环相加,设定好边界条件判断输出即可。

# 字符串+循环
# 首先把 int 转为 str,然后对字符串进行循环相加,
# 设定好边界条件判断输出即可。
class Solution:
    def addDigits(self, num: int) -> int:
        num_s = str(num)
        n = len(num_s)
        ans = 0
        while n > 1:
            for i in range(n):
                ans += int(num_s[i])
            num = ans
            num_s = str(num)
            n = len(num_s)
            ans = 0
        if n == 1:
            return num
        return ans

方法二:列表+循环

思路:思路和上面基本一致,不同在于用列表作为容器。

# 列表+循环
# 思路和上面基本一致,不同在于用列表作为容器。
class Solution:
    def addDigits(self, num: int) -> int:
        num_list = list(str(num))
        n = len(num_list)
        ans = 0
        while n > 1:
            ans += sum([int(i) for i in num_list])
            num = ans
            num_list = list(str(num))
            n = len(num_list)
            ans = 0
        if n == 1:
            return num
        return ans

方法三:取余

思路:不借助额外的空间,每次取 10 的余数,循环结束即可。

# 取余
# 不借助额外的空间,每次取10的余数,循环结束即可。
class Solution:
    def addDigits(self, num: int) -> int:
        while num >= 10:
            ans = 0
            while num:
                ans += num % 10
                num //= 10
            num = ans
        return num

方法四:数学

思路:找到数学规律,即判断除 9 的余数 +1 即可。

# 数学
# 找到数学规律,即判断除9的余数 +1 即可。
class Solution:
    def addDigits(self, num: int) -> int:
        return (num - 1) % 9 + 1 if num else 0

总结

这些数学方法我纹胳膊上,面试官问到我就把袖子撸起来。

你可能感兴趣的:(leetcode,算法,职场和发展,python,数据结构)