iT邦幫忙

2022 iThome 鐵人賽

DAY 6
1

「前幾天的 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
    }
}

「真厲害!曉欣你越來越熟悉怎麼寫程式了!」

「沒有啦⋯⋯我還是沒法想出像你們那麼厲害的邏輯」曉欣害羞的說

「沒有問題,這些題目只要多練習就可以了。大家先一起休息一下!」看出兩位已經有點疲憊的夏天,開始招呼大家一起喝咖啡聊天。


上一篇
Day 05:找出落單的同伴:136. Single Number
下一篇
Day 07:從 leetcode 休息的一天:練習 Kata
系列文
Kotlin 程式人:Leetcode 意外旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言