iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0

如果能一次到位當然好,不過,可能要多加練習,多開闊眼界增加創造力和聯想力才能達到這個程度吧。

我記得有一個題目正好可以體驗到這點。

「妳試試258. Add Digits這題,妳能馬上想到O(1)的解法嗎?」

「我看看唷,把數字的所有位數不停相加,直到剩下個位數字。這個可以用O(1)做到?學姊別騙人,我只能想到這個耶。」

class Solution {
    fun addDigits(num: Int): Int {
        var result = num
        while (result > 9) {
            result = result % 10 + result / 10
        }
        return result
    }
}

學妹的解法滿乾淨俐落,大概是之前解了幾題,沒那麼緊張了。

「給妳提示,妳還記得小學時學的2、3、5、9倍數的辨別法嗎?」

「記得啊。2的倍數,個位數會是2、4、6、8、0;3的倍數,所有位數相加會是3的倍數;5的倍數,個位數會是5和0;9的倍數,會是所有位數相加是9的倍數。⋯⋯咦?好像和題目有點像。」學妹皺了一下眉頭很快找到突破點。「這樣不就是除了0以外的9的倍數加到最後都是9嗎!」

「沒錯,而那些不是9的倍數的數字,都可以看做9的倍數加上其他數字。」

「啊!對喔,也能這樣看!那就可以簡化成三種情境了!」

class Solution {
    fun addDigits(num: Int): Int {
        return when {
            num == 0 -> 0
            num % 9 == 0 -> 9
            else -> num % 9
        }
    }
}

學妹送出程式碼後悶悶不樂:「怎麼之前就沒想到呢?也不是很難的想法呀。」

「其實很多思路的線索都已經在我們腦海待了很久,只是一時沒有聯想到,所以才需要多番練習,也算是重新整理大腦空間吧。」多資深的線索啊,十年前就埋下了。

話說,不知道這兩次送出的答案會是什麼樣的獎品呢?不是牛奶就好。


上一篇
Day06: 重複刷題小心會膩
下一篇
Day08: 正規式超強大
系列文
不解題就不能離開的房間31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言