アルゴリズム:258。数字を追加

トピック

258.数字を追加する

整数のnumを指定して、結果が1桁になるまですべての桁を繰り返し加算し、それを返します。

例1:

Input: num = 38
Output: 2
Explanation: The process is
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2 
Since 2 has only one digit, return it.

例2:

Input: num = 0
Output: 0

制約:

0 <= num <= 2^31 - 1

フォローアップ:O(1)ランタイムでループ/再帰なしでそれを行うことができますか?

再帰的ソリューション

/*
 * @lc app=leetcode.cn id=258 lang=java
 *
 * [258] 各位相加
 */

// @lc code=start
class Solution {
    
    
    public int addDigits(int num) {
    
    
        return (num < 10) ? num : addDigits(num / 10 + num % 10);
    }
}
// @lc code=end


線形解O(1)時間計算量

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

私はその背後にある数学を説明しようとします:

まず、次のことを理解する必要があります。

10^k % 9 = 1
a*10^k % 9 = a % 9 

次に、例を使用して説明します。

说一个数字x = 23456

x = 2 * 10000 + 3 * 1000 + 4 * 100 + 5 * 10 + 6

2 * 100009 = 29

3 * 10009 = 39

4 * 1009 = 49

5 * 109 = 59

次にx%9 =(2+ 3 + 4 + 5 + 6)%9、注意してくださいx = 2 * 10000 + 3 * 1000 + 4 * 100 + 5 * 10 + 6

だから私たちは持っています23456%9 =(2 + 3 + 4 + 5 + 6)%9

おすすめ

転載: blog.csdn.net/zgpeace/article/details/115017833