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
思路:如果n是2的幂,则n的二进制表示中只有一个1. 用n&(n-1),如果结果是0则表示只有一个1. 比如:
((4 & 3) == 0)
100 = 4
011 = 3
有两个例外:
- 排除n==0的情况
- 排除INT_MIN。注意INT_MIN的二进制表示为1000 0000 0000 0000 0000 0000 0000 0000
class Solution {
public:
/*
* @param n: An integer
* @return: True or false
*/
bool checkPowerOf2(int n) {
// write your code here
if(!n||n==INT_MIN){
return false;
}
return !(n&(n-1));
}
};