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 列表