iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0

在學妹順利送出了兩道題目後,我實在忍不住睡意,打了個哈欠。

「學姊昨晚守夜太累了吧?果然還是應該好好休息的。」

「沒辦法,畢竟不知道會不會發生突發事件,還是要保留一人清醒啊。不過,我本來也都是九點才醒就是了。」

早上十點的課,九點醒還是來得及的。

「啊,學姊沒有八點的課嗎?」

「沒有,我的選課標準就是十點後。」

「那學姊現在回去睡吧,反正早上的進度已經達成了。」

昨晚規劃的進度安排是早上兩題,中午兩題,午後晚上六題。

這個時間表是根據精神清醒狀態安排的,到現在為止我們都不確定送出錯誤答案會發生什麼事,危險因子能避則避。

「我睡覺的時候妳要做什麼?」

「我去研究那邊。」學妹往洗手間比了比。

「哈⋯⋯」又一個哈欠沒忍住。「記得門要保持開著。」我在陷入睡眠之前叮嚀了她一聲。

按著生理時鐘醒來後,去洗手間重新清洗了臉。

「早安,有什麼發現嗎?」我問學妹。

「沒有。」學妹正在觀察淋浴的地方,昨天我們太累了,而且也擔心另有機關,所以除了洗手台和馬桶,其他地方都沒觸碰。

我走到學妹另一邊,腦袋上下左右轉了一圈,倒是注意到沒有排水孔,但這好像也沒什麼可利用的地方。

在洗手間花了兩個小時沒發現什麼重要線索,我們回到電腦旁邊繼續解題以取得午餐。

66. Plus One要求將數字陣列當作一個整數呈現加上一的結果。

稍微麻煩的是不是順序而是逆序,於是在迴圈裡用了downTo,只在超過的情形下加上新的1開頭。

class Solution {
    fun plusOne(digits: IntArray): IntArray {
        for (i in digits.lastIndex downTo 0) {
            digits[i] += 1
            if (digits[i] < 10) {
                return digits
            }
            digits[i] %= 10
        }
        return intArrayOf(1).plus(digits)
    }
}

「學姊為什麼要寫成digits[i] %= 10digits[i] = 0不是就可以了嗎?」

我尷尬地說:「啊,妳說得對,我這個寫法是保留了可能性,當要改成其他加上數字的時候,就會很好改。但是因為題目已經限定是加1了,所以直接指定0可能可以加快速度,就寫妳的答案吧。」當希望程式碼模組化多方採用,就會寫成泛用型;但是在講求效率的演算法上,特化型比較適合。

1859. Sorting the Sentence要求將字串裡的單詞按照各自後面的數字排序。

字串拆成單詞串會先想到的就是split方法。
幸運的是排序的數字統一都是個位數,不用額外將文字轉換成數字型態,因為同樣長度的數字和文字排序結果是一致的,最後再把拿掉數字的單詞組回字串就達成題目要求了。

class Solution {
    fun sortSentence(s: String): String {
        return s.split(" ")
        .sortedBy { it.last() }
        .joinToString(" ") { it.dropLast(1) }
    }
}

上一篇
Day12: immutableList初始化
下一篇
Day14: Kotlin 版本對程式的影響
系列文
不解題就不能離開的房間31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言