用 O(1) 时间检测整数 n 是否是 2 的幂次。
样例
n=4,返回 true;
n=5,返回 false.
注意
O(1) 时间复杂度
Using O(1) time to check whether an integer n is a power of 2.
Example
For n=4, return true;
For n=5, return false;
Challenge
O(1) time
//O(1)若n为2的幂次方,则n与n-1的二进制序列无对应相同处。
class Solution {
/*
* @param n: An integer
* @return: True or false
*/
public boolean checkPowerOf2(int n) {
if(n<=0) return false;
return (n & (n-1)) == 0 ? true : false;
}
};
//O(32)若n为2的幂次方,则n的二进制序列中只有一个1。
class Solution {
/*
* @param n: An integer
* @return: True or false
*/
public boolean checkPowerOf2(int n) {
if(n<=0) return false;
int count = 0;
while(0 != n) {
count += n & 0x01;
n = n >> 1;
}
return count == 1 ? true : false;
}
};