iT邦幫忙

2022 iThome 鐵人賽

DAY 3
1

上次的題目寫完之後,更有自信一點了吧?

「對呀!沒想到寫程式還蠻簡單的」

「今天我們要寫稍微困難一點的程式囉」夏天打開了 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 = 15i % 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 這個程式語言好特別!」

「我們可以再多寫幾題嗎?我覺得寫程式很有趣!」

「下次吧!剛剛公司的電話搞得我好累,暫時不想看程式了⋯⋯為什麼有佛卡夏!我也要點!」


上一篇
Day 02:闖入 leetcode 世界的不速之客:2235. Add Two Integers
下一篇
Day 04:找尋遺失的秘寶:268. Missing Number
系列文
Kotlin 程式人:Leetcode 意外旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言