class Solution {
public:
int addDigits(int num) {
}
};
258. 各位相加
给定一个非负整数 num
,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。
示例 1:
输入: num =38
输出: 2 解释: 各位相加的过程为: 38 --> 3 + 8 --> 11 11 --> 1 + 1 --> 2 由于2
是一位数,所以返回 2。
示例 1:
输入: num = 0 输出: 0
提示:
0 <= num <= 231 - 1
进阶:你可以不使用循环或者递归,在 O(1)
时间复杂度内解决这个问题吗?
原站题解
javascript 解法, 执行用时: 80 ms, 内存消耗: 42.1 MB, 提交时间: 2023-10-28 11:08:11
/** * @param {number} num * @return {number} */ var addDigits = function(num) { while (num >= 10) { let sum = 0; while (num > 0) { sum += num % 10; num = Math.floor(num / 10); } num = sum; } return num; };
cpp 解法, 执行用时: 0 ms, 内存消耗: 6.2 MB, 提交时间: 2023-10-28 11:07:50
class Solution { public: int addDigits1(int num) { while (num >= 10) { int sum = 0; while (num > 0) { sum += num % 10; num /= 10; } num = sum; } return num; } int addDigits(int num) { return (num -1) % 9 + 1; } };
golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2023-10-28 11:07:36
func addDigits1(num int) int { for num >= 10 { sum := 0 for ; num > 0; num /= 10 { sum += num % 10 } num = sum } return num } func addDigits(num int) int { return (num - 1) % 9 + 1 }
java 解法, 执行用时: 0 ms, 内存消耗: 38.3 MB, 提交时间: 2023-10-28 11:06:03
class Solution { // 模拟 public int addDigits1(int num) { while (num >= 10) { int sum = 0; while (num > 0) { sum += num % 10; num /= 10; } num = sum; } return num; } // 数学规律 public int addDigits(int num) { return (num - 1) % 9 + 1; } }
python3 解法, 执行用时: 44 ms, 内存消耗: 13.5 MB, 提交时间: 2020-11-02 15:45:18
class Solution: def addDigits(self, num: int) -> int: res = sum([int(i) for i in str(num)]) while res > 9: res = sum([int(i) for i in str(res)]) return res