在學妹順利送出了兩道題目後,我實在忍不住睡意,打了個哈欠。
「學姊昨晚守夜太累了吧?果然還是應該好好休息的。」
「沒辦法,畢竟不知道會不會發生突發事件,還是要保留一人清醒啊。不過,我本來也都是九點才醒就是了。」
早上十點的課,九點醒還是來得及的。
「啊,學姊沒有八點的課嗎?」
「沒有,我的選課標準就是十點後。」
「那學姊現在回去睡吧,反正早上的進度已經達成了。」
昨晚規劃的進度安排是早上兩題,中午兩題,午後晚上六題。
這個時間表是根據精神清醒狀態安排的,到現在為止我們都不確定送出錯誤答案會發生什麼事,危險因子能避則避。
「我睡覺的時候妳要做什麼?」
「我去研究那邊。」學妹往洗手間比了比。
「哈⋯⋯」又一個哈欠沒忍住。「記得門要保持開著。」我在陷入睡眠之前叮嚀了她一聲。
按著生理時鐘醒來後,去洗手間重新清洗了臉。
「早安,有什麼發現嗎?」我問學妹。
「沒有。」學妹正在觀察淋浴的地方,昨天我們太累了,而且也擔心另有機關,所以除了洗手台和馬桶,其他地方都沒觸碰。
我走到學妹另一邊,腦袋上下左右轉了一圈,倒是注意到沒有排水孔,但這好像也沒什麼可利用的地方。
在洗手間花了兩個小時沒發現什麼重要線索,我們回到電腦旁邊繼續解題以取得午餐。
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] %= 10
,digits[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) }
}
}