Kotlin Leetcode - 258. Add Digits
class Solution {
fun addDigits(num: Int): Int {
}
}
解題思路
這一題我們可以從以前學的數學發現,一個數字和他每位數相加之後的結果,相減之後一定是 9 的倍數:
159 - (1 + 5 + 9)
= (1*100 + 5*10 + 9) - (1 + 5 + 9)
= (1*99 + 5*9)
所以,這兩個數除以 9 的餘數會一樣。
也就是說,大多數時候,不斷將每位數相加,直到最後得到一個數字的答案
就是輸入的內容除以 9 的餘數。
除了一種特例:
如果輸入的內容不是 0,而且剛好是 9 的倍數,
那麼答案是 9,而不是這個數除以 9 的餘數 0。
範例:
輸入 918,9 + 1 + 8 = 18,1 + 8 = 9 所以答案是 9
以口語說明的解法如下:
- 如果輸入不是 0,並且是 9 的倍數,回傳 9
- 回傳輸入除以 9 的餘數
Kotlin 參考解答
點擊展開解答
每個位數分開計算的寫法
class Solution {
fun addDigits(num: Int): Int {
var number = num
while (number >= 10) {
var sum = 0
while (number > 0) {
sum += number % 10
number /= 10
}
number = sum
}
return number
}
}
使用 if
的寫法
class Solution {
fun addDigits(num: Int): Int {
if (num != 0 && num % 9 == 0) {
return 9
}
return num % 9
}
}
利用 when
語法可以更加簡化這段程式
class Solution {
fun addDigits(num: Int) = when {
num != 0 && num % 9 == 0 -> 9
else -> num % 9
}
}
回到 leetcode 列表