轉(zhuǎn)自我的 blog: 用 Swift 刷 LeetCode No.258 - Add Digits
用 Swift 刷 LeetCode 的第四彈,Add Digits。
add_digits.png
題目 Easy 級(jí)別,也是目前我第一道一遍寫成就通過(guò)的題目(無(wú)語(yǔ)法錯(cuò)誤無(wú)錯(cuò)誤無(wú)超時(shí),爽爽爽)!
通過(guò)的代碼如下,還用了一下 Array 的 reduce:
class Solution {
func addDigits(num: Int) -> Int {
if num < 10 {
return num
}
var numbers = [Int]()
var n = num
let base = 10
while n > 0 {
numbers.append(n % base)
n /= base
}
let sum = numbers.reduce(0) {
$0 + $1
}
return addDigits(sum)
}
}
然而,這個(gè)題目還讓你想想有沒有不用任何循環(huán)和遞歸的解法,也就是 O(1) 的復(fù)雜度。
這個(gè)要求對(duì)我來(lái)說(shuō)就是超綱題了啊,O(1) 的話那不就是判斷+賦值了嗎……
結(jié)果這個(gè)題的 O(1) 解法就是個(gè)數(shù)學(xué)題,這個(gè)是有公式的(wiki)。求的解是個(gè)叫 Digital Root 的東西,維基百科里面有求解詳細(xì)的證明和過(guò)程(我是懶得看了)。就目前遇到的兩個(gè)題來(lái)說(shuō),貌似 O(1) 解法的題都是靠數(shù)學(xué)公式才可以。