「前幾天的 bit operation,兩位研究的還順利嗎?」
「應該⋯⋯應該還可以吧」兩人互看了一眼,不確定的說。
「太好了!今天我們的題目,也可以用到 bit operation 的技巧喔」夏天邊說,邊打開了 231. Power of Two 這題。
看到題目的兩人,開始試著從二進位的角度思考。夏天期待的看著兩人在紙上寫寫畫畫,試著找出所有二的冪次數字的共通性。
「夏姐,我們想到這些數字都會是『1000⋯⋯』這樣的感覺,可是該怎麼寫成程式去驗證呢?」
「好問題,那麼這些數字減一,會長什麼樣子呢?」
「減一的話,那就會是『111⋯⋯』」菁菁努力思考。
「不行⋯⋯我覺得我幫不上忙」曉欣有點沮喪的說。
「沒關係,先休息一下,寫程式偶爾就是會這樣卡住的」菁菁安慰道。
兩位先買了點東西吃完後,繼續在紙上寫著不同數字的組合。突然,菁菁先發現了規律。
「咦!除了二的冪次以外,所有的數字和減一之後的結果,都會有一樣的地方耶!像是 『1010』 和 『1001』前面兩位就是一樣的」
「對呀!所以我們只要驗證數字和其減一之後的結果,都沒有一樣的地方就可以了」
夏天邊說,一邊寫出了以下解法
class Solution {
fun isPowerOfTwo(n: Int): Boolean {
if (n <= 0) {
return false
}
return (n and (n-1)) == 0
}
}
「哇⋯⋯感覺這解法好難想到喔」
「沒關係,常常看就熟悉了。另外這個寫法還可以用 when
改寫,曉欣你有辦法嗎?」
「應該可以,像是這樣嗎?」曉欣試著用 when
寫
class Solution {
fun isPowerOfTwo(n: Int) = when {
n <= 0 -> false
else -> (n and (n-1)) == 0
}
}
「真厲害!曉欣你越來越熟悉怎麼寫程式了!」
「沒有啦⋯⋯我還是沒法想出像你們那麼厲害的邏輯」曉欣害羞的說
「沒有問題,這些題目只要多練習就可以了。大家先一起休息一下!」看出兩位已經有點疲憊的夏天,開始招呼大家一起喝咖啡聊天。