用 Swift 刷 LeetCode No.258 - Add Digits

轉(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é)公式才可以。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,766評(píng)論 0 33
  • leetcode刷題記錄本文記錄一下leetcode刷題記錄,記錄一下自己的解法和心得。 LeetCode Two...
    EarthChen閱讀 3,499評(píng)論 0 6
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會(huì)員),僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 17,899評(píng)論 2 36
  • 前言 為什么要用 Swift 刷 leetcode?因?yàn)槲矣袃蓚€(gè)想法,一是學(xué) Swift 并且有機(jī)會(huì)練練,二是想把...
    戴倉(cāng)薯閱讀 2,531評(píng)論 5 21
  • 一天 很短 短的來(lái)不及說(shuō)早安便已黃昏 一天 又很長(zhǎng) 長(zhǎng)的從日出東方直到日落西山 一天里 感嘆時(shí)間過(guò)的太快 又哀怨時(shí)...
    春夏AI閱讀 218評(píng)論 0 2