LeetCode258. 各位相加

如果不考虑进阶的条件,可以直接循环或者递归,把一位上的所有数字加起来然后对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;
    }
};
posted @ 2020-08-21 16:14  machine_gun_lin  阅读(112)  评论(0)    收藏  举报