題目地址:
https://leetcode.com/problems/add-digits/
給定一個非負整數,加總其各位數之和得到另一個整數,再重複做此操作直到得到一位數。求那個一位數。
首先如果這個數本身就是一位數,則返回自己;否則判斷一下其能否被整除,如果能則返回,否則返回餘數。代碼如下:
public class Solution {
public int addDigits(int num) {
if (num < 10) {
return num;
}
int res = num % 9;
return res == 0 ? 9 : res;
}
}
時空複雜度。
算法正確性證明:
設,則所以最後所得的一位數與其各位數之和模同餘。然而非零數各位數之和最後算出來不可能是,所以只能是。
然而爲什麼最後一定會得到一個一位數呢(嚴格來說這個”非常顯然“的結論也是需要證明的)?可以由再加上數學歸納法證明。這裏就不證了。