Recca Chao 的 gitHub page

推廣網站開發,包含 Laravel 和 Kotlin 後端撰寫、自動化測試、讀書心得等。Taiwan Kotlin User Group 管理員。

View on GitHub

Kotlin Leetcode - 231. Power of Two

題目連接

class Solution {
    fun isPowerOfTwo(n: Int): Boolean {
    }
}

解題思路

我們觀察後發現

二的冪次的二進位剛好都是 1(0*) 這樣的結構

所以我們可以利用 bit operation

快速的比對出解答

Kotlin 參考解答

點擊展開解答

當一個數字 n 的二進位是 1(0*) 這樣的結構時

我們可以知道 n-1 一定是 1* 的結構,並且比起 n 少一位

因此我們可以發現,這兩個數字每個位數都是不一樣的

因此 (n and (n-1)) 答案為零

class Solution {
    fun isPowerOfTwo(n: Int): Boolean {
        return n > 0 && (n and (n-1)) == 0
    }
}

或者可以利用 when 縮減成單個表達式

class Solution {
    fun isPowerOfTwo(n: Int) = when {
        n <= 0 -> false
        else -> (n and (n-1)) == 0
    }
}

也可以用 countOneBits() 確認 n 裡面只有一個位元是 1

class Solution {
    fun isPowerOfTwo(n: Int): Boolean {
        return n > 0 && n.countOneBits() == 1
    }
}

回到 leetcode 列表