写在前面

  • 难度​​简单​
  • 逻辑演算能力明显不够用,==||,,,
  • 重要结论
  • ​任何一个整数模9同余于它的各数位上数字之和​

题目详情

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

示例:

输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2

进阶:
你可以不使用循环或者递归,且在 O(1)

ac代码

  • 非直接想法(有点儿拐弯)
class Solution
{
public:
int addDigits(int num)
{
while(num <0 || num > 9)
{
int sum = 0;
sum = num%10;
num = sum + num/10;
}
return num;
}
};
  • 数学结论法
class Solution {
public:
int addDigits(int num) {
return num/9 == 0 ? num : num%9 == 0 ? 9 : num%9;
// 我来解释一下这个
// 首先 如果 num/9 等于 0 返回 num
// 否则 执行 num%9 == 0 ? 9 : num%9 接下来依次类推
// 这行代码的本质:就是嵌套了 两个三目运算符,但是影响了 其他人的可读性,哈哈
}
};
  • 参考文章
  • Leetcode刷题33-258.各位相加(C++详细解法!!!)
  • 《任何一个整数模9同余于它的各数位上数字之和》