「上次有關字串的題目,解的還順利嗎?」
「很順利!我回家還自己寫了幾題呢!」曉欣開心的邊說邊打開題目 771. Jewels and Stones
class Solution {
fun numJewelsInStones(jewels: String, stones: String): Int {
return stones.count { it in jewels }
}
}
class Solution {
fun lengthOfLastWord(s: String): Int {
return s.trim()
.reversed()
.plus(" ")
.indexOf(" ")
}
}
「哇!曉欣好厲害!你怎麼偷偷寫這麼多題的!」
「沒有啦⋯⋯我也是參考別人寫的。這一篇 iThome 鐵人賽的文章 不解題就不能離開的房間 寫的。」
「看人家的文章不丟臉呀,參考前輩的文章也是很好的學習經驗。」
「我覺得這系列文章真的很好!希望有一天可以見到作者⋯⋯」
「你想見到的人好多喔」菁菁不禁大笑。
「沒問題,你繼續學 Kotlin,總有一天會有機會見到他們的」
「今天我們學一個新的程式觀念:遞迴。
簡單的說,遞迴就是函數自己呼叫自身。」
「有點⋯⋯有點類似迴圈嗎?」曉欣不確定的問。
「有些相似。我們實際看一題題目吧!」夏天打開了 509. Fibonacci Number
F(0) = 0, F(1) = 1
F(n) = F(n - 1) + F(n - 2), for n > 1.
「這邊的 F(n) = F(n - 1) + F(n - 2)
,就是函數自己呼叫自己。所以,我們可以這樣寫:」
class Solution {
fun fib(n: Int) = when {
n == 0 || n == 1 -> n
else -> fib(n-1) + fib(n-2)
}
}
「原來如此!」兩人看著螢幕感嘆。
「還可以這樣寫喔」夏天又改了一個版本
class Solution {
fun fib(n: Int): Int {
return when (n) {
0, 1 -> n
else -> fib(n-1) + fib(n-2)
}
}
}
「哇⋯⋯好厲害⋯⋯」
「開始覺得有點難了嗎?今天先到這邊吧」夏天說完,拿起美式開始喝了起來。