iT邦幫忙

2022 iThome 鐵人賽

DAY 8
1

「這幾天兩位練習 Kata 還順利嗎?有沒有遇到什麼困難?」

「還好,題目都是可以解決的,沒什麼大問題。」曉欣在幾天的練習過後,對寫程式的自信越來越夠了。

「很好,那接下來我們就要來處理有一點點困難的部分囉!」

夏天一邊說,一邊打開了 27. Remove Element 這一題

「這題很簡單嘛!」菁菁邊說邊寫

「啊⋯⋯這邊可以不用 for 呀!改用 forEach」「對耶!謝謝提醒!」

class Solution {
    fun removeElement(nums: IntArray, `val`: Int): Int {
        var l = 0
        nums.forEach {
            if (it != `val`) {
                nums[l++] = it
            }
        }
        return l
    }
}

「真厲害!兩位都進步好多!」夏天一邊喝著美式一邊說。

「看起來今天可以再多幾題」夏天又開啟了一個題目,這次是 66. Plus One

這一題有一點點難,兩個人分別寫出了不同的寫法。

曉欣的寫法:

class Solution {
	fun plusOne(digits: IntArray): IntArray {
	    val mutableDigits = digits.toMutableList()
	    mutableDigits[mutableDigits.size - 1]++
	    for (i in mutableDigits.size - 1 downTo 1) {
	        if (mutableDigits[i] == 10) {
	            mutableDigits[i] = 0
	            mutableDigits[i - 1] = mutableDigits[i - 1] + 1
	        }
	    }
	    if (mutableDigits[0] == 10) {
	        mutableDigits[0] = 0
	        mutableDigits.add(0, 1)
	    }
	    return mutableDigits.toIntArray()
	}
}

菁菁的解法:

class Solution {
    fun plusOne(digits: IntArray): IntArray {
        for (i in digits.size - 1 downTo 0) {
            digits[i] += 1
            if (digits[i] <= 9) return digits
            digits[i] = 0
        }
        val arr = IntArray(digits.size + 1)
        arr[0] = 1

        return arr
    }
}

「菁菁你的寫法好清楚喔!我覺得自己想得好複雜」

「沒關係呀!會隨著經驗越寫越清楚的。你對 Kotlin 的 Collection 越來越熟悉了耶!還會用 toMutableList()

「對呀!聖佑的這本《Kotlin Collection 全方位解析攻略 : 精通原理及實戰,寫出流暢好維護的程式》 寫得真好,希望有一天可以見到他本人向他學習。」

「說不定有機會喔,聽說他常常會出沒在 Kotlin Meetup 內,八月的 Kotlin Meetup #7 還是他本人講的呢!」

「哇!那我要多關注一下這個活動了。」

「看兩位聊得那麼開心,都寫完了嗎?那我們再多一題看看?」夏天開啟了 217. Contains Duplicate

這題比較難一點,兩人不禁皺起了眉頭,開始思考

「感覺好像可以用迴圈處理,可是這樣還要用另一個陣列去紀錄內容,有一點點麻煩」

「這題可以用 Kotlin 內建的 groupingBy 來簡化一些。來!我寫給兩位看看」夏天邊寫邊開始說明

「在 Kotlin 裡面,如果一個函數的最後一個參數,是接收另一個 lambda 函數的話,那麼就可以直接放在 {} 裡面。」

「那個⋯⋯請問 lambda 的意思是什麼?」曉欣害羞地問。

「沒關係,你就先把它當作一個普通的函數就好」夏天送出了以下的答案

class Solution {
    fun containsDuplicate(nums: IntArray): Boolean 
        = nums.toList()
            .groupingBy { it }
            .eachCount()
            .any { it.value > 1 }
}

「哇!夏天這樣寫好清楚喔!從來沒想過程式可以寫成這樣」

「對呀!這就是 Kotlin 的特性了。由於他的語法特性,程式很容易寫得非常簡潔」

「今天寫好幾題了,我們就先到這邊吧!」


上一篇
Day 07:從 leetcode 休息的一天:練習 Kata
下一篇
Day 09:字串的文字處理:7、9、1108
系列文
Kotlin 程式人:Leetcode 意外旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言