Leetcode 258. Add Digits

關關的刷題日記發表於2018-01-08

題目的意思是給定一個非負整數,不斷地重複這個過程:將其每一位數字加起來求和。直到最終得到的結果僅有一位數字。不用迴圈或者遞迴能否實現時間複雜度為O(1)的做法?

 

方法1:寫了一個迴圈版本的。

class Solution {
public:
    int add(int num)
    {
        int re=0;
        while(num>0)
        {
            re+=num%10;
            num/=10;
        } 
        return re;
    }
    
    int addDigits(int num) {
        while(true)
        {
            if (add(num)<10) 
                return add(num);
            else
                num=add(num);
        }
        return 0;
    }
};


方法2:寫了一個遞迴版本的。

class Solution {
public:
	int addDigits(int num) {
		int re = 0;
		while (num > 0)
		{
			re += num % 10;
			num /= 10;
		}
		if (re < 10)
			return re;
		return addDigits(re);
	}
};


方法3:

不用迴圈或者遞迴能否實現時間複雜度為O(1)的做法。看了一下答案,這道題實際上是求給定數的樹根:a的數根b = ( a - 1) % 9 + 1。

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





相關文章