iT邦幫忙

2022 iThome 鐵人賽

DAY 7
2

「連續寫了幾天的 leetcode 了,兩位有些累了吧?」

「上次的題目突然有一點難⋯⋯不過寫程式蠻有趣的,之前都一直很害怕會完全看不懂⋯⋯謝謝夏姐的指導」

「我也覺得 Kotlin 這個程式語言蠻有趣的,有很多意想之外的寫法!」

「好的,今天我們先休息一下,不寫 leetcode 囉!」

「咦?」曉欣嚇了一跳。「那今天就是不寫程式,只讓夏姐請客囉!謝謝啦——」菁菁開心的說

「別急別急,我說不寫 leetcode,並沒有不寫程式呀。」夏天一邊說,一邊打開自己的筆電。

「Kata?」兩人看到筆記標題,異口同聲的問。

「對呀!Kata。這個字是從日本空手道的『型』過來的,有點類似中國武術的『招式』。」

「招式?感覺好像要練功了」菁菁不禁打斷夏天,笑了出來。

「算是練功的一種沒錯。就好像武術家平時要演練一些招式,以免實戰時練習不足一樣。

我們寫程式,也要時常看一些單純的題目,做做練習,來讓自己不會忘記寫程式的手感。」

夏天打開第一題題目:閏年

寫程式計算某個西元年份是否是閏年

  • 如果該年份可以被 400 整除,比方說西元 2000 年,是閏年
  • 如果該年份可以被 100 整除,比方說西元 2100 年,不是閏年
  • 如果該年份可以被 4 整除,比方說西元 2004 年,是閏年

「這題目跟之前寫過的很像!我應該可以自己寫出來」曉欣開心的邊說邊寫,菁菁也跟著寫出了答案

fun isLeapYear(year: Int) : Boolean = when {
	year % 400 == 0 -> true
	year % 100 == 0 -> false
	else -> year % 4 == 0
}

「很簡單吧?那我們再看一題『判斷質數』」

輸入一個正整數,判斷輸入的數字是否為質數

「這題我也會!」菁菁搶著說,順便炫耀一下自己剛記得的 until 關鍵字

fun isPrime(number: Int): Boolean {
    for (i in 2 until number) {
        if (number % i == 0) {
            return false
        }
    }
    return true
}

兩人就這樣有說有笑的連續解了幾題。像是:

列出最大公因數

輸入兩個數字,回傳這兩個數字的最大公因數

fun gcd(a: Int, b: Int): Int {  
    var bigger = a  
    var smaller = b  
    if (a < b) {  
        bigger = b  
        smaller = a  
    }  
    for (i in smaller downTo 2) {  
        if (bigger % i == 0) {  
            return i  
        }  
    }  
    return 1  
}

遮罩

輸入一個正整數 target
得到長度為 target 的一串 1 bits
這邊可以利用 binary operation
-1 ^ (-1 << target)

fun mask(n: Int) = -1 xor (-1 shl target)

「咦?曉欣你可以自己看著二進位的運算寫程式囉?」

「嗯!我回去有花一些時間看看,搞懂 Kotlin 可以使用的操作有哪一些。」

「這些題目都很簡單,在平時每天寫一寫練習,不會花太多時間。但是對你們熟悉 Kotlin 的語法,會很有幫助喔!

記得不要忘記了每天的練習,來!一起來吃貝果!」


上一篇
Day 06:繼續鍛鍊 bit operation:231. Power of Two
下一篇
Day 08:大量的陣列題目:27、66、217
系列文
Kotlin 程式人:Leetcode 意外旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言