上次的題目寫完之後,更有自信一點了吧?
「對呀!沒想到寫程式還蠻簡單的」
「今天我們要寫稍微困難一點的程式囉」夏天打開了 412. Fizz Buzz 的題目。
「這個題目要用到判斷的方式,你有看過了嗎?」
「我知道!我有看過 if
的寫法。」有了上次成功的經驗,曉欣這次比較有自信了。
「那你先試著寫,寫好之後我來看看」
曉欣花了一些時間,在答案欄內寫下自己的想法:
class Solution {
fun fizzBuzz(n: Int): List<String> {
val result = ArrayList<String>()
for (i in 1 until n + 1) {
if (i % 3 == 0) {
result.add("Fizz")
}
else if (i % 5 == 0) {
result.add("Buzz")
}
else if (i % 3 == 0 && i % 5 == 0) {
result.add("FizzBuzz")
}
else {
result.add(i.toString())
}
}
return result
}
}
「嗯——試著跑看看吧?看這樣的寫法能不能通過,我先接個電話。」夏天拿著美式咖啡和手機,走到丹提外面講電話去了。
按下送出之後,看到紅字的 Wrong Answer,曉欣覺得有點挫敗,不知道下一步該怎麼辦。
「嗯⋯⋯這樣寫應該不會過吧?」點完佛卡夏的菁菁湊過來。
「可以幫我看看嗎?我已經卡在這邊很久了,不知道為什麼這樣寫不會過⋯⋯」
「沒問題,你可以先看看失敗的資料是哪一筆呀?」
說到這裡,曉欣才想起來,剛剛實在太緊張,還沒認真看系統的錯誤訊息。
Output: ["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","Fizz"]
Expected: ["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]
「找到了!最後一個應該要是 FizzBuzz
,不是 Fizz
。」
「對呀,你再想看看,在 n = 15
時,運作下來會到哪個 if
時回傳?」
曉欣拿出紙筆,開始畫出程式的流程思考。
「啊!n = 15
在 i % 3
的時候就已經跳出了,所以不會跑到 esult.add("FizzBuzz")
這段!」
「對!好厲害!你自己想通了!」
「那⋯⋯該怎麼改才是對的?」
「我們將順序調整一下就好啦?像是這樣」
class Solution {
fun fizzBuzz(n: Int): List<String> {
val result = ArrayList<String>()
for (i in 1 until n + 1) {
if (i % 3 == 0 && i % 5 == 0) {
result.add("FizzBuzz")
}
else if (i % 3 == 0) {
result.add("Fizz")
}
else if (i % 5 == 0) {
result.add("Buzz")
}
else {
result.add(i.toString())
}
}
return result
}
}
送出之後,終於通過的曉欣總算放鬆一點。
「這樣說起來,是不是還可以改成這樣?」
class Solution {
fun fizzBuzz(n: Int): List<String> {
val result = ArrayList<String>()
for (i in 1 until n + 1) {
if (i % 15 == 0) {
result.add("FizzBuzz")
}
else if (i % 3 == 0) {
result.add("Fizz")
}
else if (i % 5 == 0) {
result.add("Buzz")
}
else {
result.add(i.toString())
}
}
return result
}
}
「對!這樣更簡單了,你剛學就想到這麼多好厲害!」
「嗯?通過了?看來你自己找到哪邊出錯囉!」講完電話的夏天,回來看了看筆電,滿意的說。
「對呀!感謝菁菁幫忙!」
「其實還可以這樣寫喔!」夏天邊說邊調整程式的寫法
class Solution {
fun fizzBuzz(n: Int): List<String> {
val result = ArrayList<String>()
for (i in 1 until n + 1) {
when {
i % 15 == 0 -> result.add("FizzBuzz")
i % 3 == 0 -> result.add("Fizz")
i % 5 == 0 -> result.add("Buzz")
else -> result.add(i.toString())
}
}
return result
}
}
「原來可以用 when
,Kotlin 這個程式語言好特別!」
「我們可以再多寫幾題嗎?我覺得寫程式很有趣!」
「下次吧!剛剛公司的電話搞得我好累,暫時不想看程式了⋯⋯為什麼有佛卡夏!我也要點!」