没做过就做不来,做过了就做得来的easy题
法一:一力降十会
法二:考虑位运算,2的幂次,只有n的二进制的最高位是1,其余全是0,n-1之后,除了当前这个最高位1变为0,其余全变为1,这是充要条件,如果进行&运算后为0,且n>0的话,证明它是2的幂。
tips:==的优先级大于&
class Solution {
public:
bool isPowerOfTwo(int n) {
//要不要考虑负数或者0的情况,还有小数
//负数以及0,2不管怎么样都达不到的,所以直接false
// if(n <= 0) return false;
// if(n == 1) return true;
// while(n != 1 && n != 2){
// if(n % 2 == 1) return false;
// n /= 2;
// }
// return true;
//考虑位运算
//2的幂次,只有1个1,n-1之后,除了当前这个1变为0,其余全变为1,这是充要条件,如果进行&运算后为1,证明它是2的幂
//==的优先级大于&
return n > 0 && (n & (n-1)) == 0;
}
};