解题思路:
首先想到的就是循环判断是否能被2整除,然后除2不停循环下去,直到大于1(因为1本身就属于2的0次幂),当然还要注意小于等于0的输入,直接返回false即可,代码如下:
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n <= 0) {
return false;
}
bool flag = true;
while(n > 1) {
if(n % 2 == 0) {
n /= 2;
} else {
flag = false;
break;
}
}
return flag;
}
};
再来个递归的方式解决,也是同样的思路,代码如下:
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n <= 0) {
return false;
}
if(n == 1) {
return true;
}
if(n % 2 == 0) {
return isPowerOfTwo(n / 2);
} else {
return false;
}
}
};
能不能不用递归或者循环解决问题呢?当然可以,位运算是解决该题最简便的方式,直接时间复杂度和空间复杂度O(1),就是判断二进制最后一位是否为0,代码如下:
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
};