LeetCode258. 各位相加

88 阅读1分钟

如果不考虑进阶的条件,可以直接循环或者递归,把一位上的所有数字加起来然后对10取余。

class Solution {
public:
    int addDigits(int num) {
        int sum = 0;
        while(num >= 10) {
            sum = 0;
            while(num != 0) {
                int temp = num % 10;
                sum += temp;
                num /= 10;
            }
            num = sum;
        }
        return num;
    }
};

不过进阶要求我们不能用循环或者递归。 实际上,计算所有位上的数字有一个数学方法。

class Solution {
public:
    int addDigits(int num) {
        if(num % 9 == 0 && num != 0) {
            return 9;
        }
        return num % 9;
    }
};

实际上,上面代码可以压缩到一行里:

class Solution {
public:
    int addDigits(int num) {
        return (num - 1) % 9 + 1;
    }
};