给定一个非负整数 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) 时间复杂度内解决这个问题吗?


    1. class Solution {
    2. public int addDigits(int num) {
    3. while (num > 9) {
    4. int tem = 0;
    5. while (num != 0) {
    6. tem += num % 10;
    7. num /= 10;
    8. }
    9. num = tem;
    10. }
    11. return num;
    12. }
    13. }

    数学

    1. class Solution {
    2. /**
    3. 同余定理,只需要处理相加等于9的边界情况
    4. */
    5. public int addDigits(int num) {
    6. return (num - 1) % 9 + 1;
    7. }
    8. }