LeetCode 258各位相加

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

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

  • 思路一:模拟计算过程O(logn)

class Solution {
public:
    int addDigits(int num) {
        while(num >= 10)
        {
            int sum = 0;
            while(num)
            {
                sum += num % 10;
                num /= 10;
            }
            num = sum;
        }
        return num;
    }
};
  • 思路二:数论O(1)

    只需要判断这个数字模 9 之后的余数,若余 0 则返回 9,依据:x*100+y*10+z=x*99+y*9+x+y+zx+y+z即为所求或下一次迭代的数。

class Solution {
public:
    int addDigits(int num) {
        if(num == 0) return 0;
        if(num % 9) return num % 9;
        else return 9;
        //return num % 9 ? num % 9 : 9;//写法二
        //return (num - 1) % 9 + 1;//写法三
    }
};
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐