程序员社区

Leetcode 258 各位相加

目录

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

示例:

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

寻常方法(循环)

class Solution {
    public int addDigits(int num) {
        int res;
        while(true) {
            res = 0;
            while(num > 0){
                int tmp = num % 10;
                res += tmp;
                num /= 10;
            }
            num = res;
            if (num < 10) break;
        }
        return num;
    }
}

特别方法

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

思路

num = x*100+y*10+z = x*99+y*9+x+y+z

1.若num%9=0,则x+y+z%9=0, 也就是num的各位数加起来能被9整除

2.若num%9不等于0,则num%9=x+y+z%9

if(num > 0 && num % 9 == 0) return 9;
return num % 9;

缩成一句话就是

return (num-1) % 9 + 1;

赞(0) 打赏
未经允许不得转载:IDEA激活码 » Leetcode 258 各位相加

一个分享Java & Python知识的社区