Add Digits|leetcode 258【Java解題レポート】


Given a non-negative integer  num , repeatedly add all its digits until the result has only one digit.
For example:
Given  num = 38 , the process is like:  3 + 8 = 111 + 1 = 2 . Since  2  has only one digit, return it.
【問題解決の考え方】:
テーマガイドの一般的な考え方に従って、皆さんを取り出して、1桁の数字になるまで加算します.
【コード実装】:
public class Solution {
    public int addDigits(int num) {
        int sum = num;
        while(num > 9) { 	//         ,    
            sum = 0;
            while(num > 9) {            //    num(     )     
                sum += num % 10;
                num /= 10;
            }
            sum += num;            //     
            num = sum;
        }
        return sum;
    }
}

【最適化解法】:
このような数ABCDEがある場合、ABCDE=A*10000+B*1000+C*100+D*10+E=(A+B+C+D+E)+(A*9999+B*999+C*99+D*9+E)があると、ABCDE%9=(A+B+C+D+E)%9となり、ABCDE%9の結果が1桁となることは良好であるが、ここでは(A+B+C+D+E)%9が1であれば0となる点に注意が必要である.従ってABCDE%9=(A+B+C+D+E-1)%9+1を用いることができ,これは問題を完璧に解決した.
public class Solution {
    public int addDigits(int num) {
        return 1+(num-1) % 9;
    }
}

最後に、皆さんの批判と証言を歓迎します.