給定一個整數,編寫一個函數來判斷它是不是 2 的冪次方。函數
示例 1:spa
輸入: 1
輸出: true
解釋: 20 = 1
複製代碼
示例 2:code
輸入: 16
輸出: true
解釋: 24 = 16
複製代碼
示例 3:it
輸入: 218
輸出: false
複製代碼
咱們首先看一組數字的二進制, 2^n
的二進制只有一位是1其他全是0,2^n - 1
的二進制全是1。按位與的取值規則以下,1 & 1 等於 1; 1 & 0 等於 0;0 & 1 等於0;0 & 0等於0。因此2^n & 2^n-1等於0。咱們能夠利用這個特性,判斷數字是否爲2的次冪。io
// 2
0b10
// 1
0b01
// 0
0b10 & 0b01 === 0
// 4
0b100
// 3
0b011
// 0
0b100 & 0b011 === 0
// 256
0b100000000
// 255
0b011111111
// 0
0b100000000 & 0b011111111 === 0
// 128
0b10000000
// 127
0b01111111
// 0
0b10000000 && 0b01111111 === 0
複製代碼
/** * @param {number} n * @return {boolean} */
var isPowerOfTwo = function(n) {
if (n <= 0) {
return false
}
if ((n & n - 1) === 0) {
return true
}
return false
};
複製代碼
2^n
必然會被1 << 31
整除, 也能夠利用這一點解答function
/** * @param {number} n * @return {boolean} */
var isPowerOfTwo = function(n) {
if (n <= 0) {
return false
}
if ((1 << 31) % n === 0) {
return true
}
return false
};
複製代碼