「連續寫了幾天的 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 的語法,會很有幫助喔!
記得不要忘記了每天的練習,來!一起來吃貝果!」