今天继续LeetCode,第231题,判断一个给定的整数是否是2的乘方。
分析:
方法一:既然是判断2的乘方,那么将这个数进行不断除2,那么除数不能整除2就不是2的乘方,如果是就继续除2,直到为1结束。这个方法思想简单,但是因为每次都要除2,那么对于一个大数的话,就会花费很多时间。
方法二:因为是2的乘方,可以利用二进制来解题,判断给定的数是否是最高位为1,其余位全部为0。那么就转换成位运算。
问题:
1、边界情况的考虑(如果除数为1,输入的值为1,或者为0,负数);
2、Python中的或、与、非的表示方法是or、and、not;
附上c++代码:
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n<=0)
return false;
if(n==1)
return true;
while(n%2==0)
{
n=n/2;
if(n==1)
return true;
}
return false;
}
};
附上C++优化的代码:
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n<=0)
return false;
return !(n&(n-1));
}
};
附上Python代码:
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
if n<=0:
return False
return not (n&(n-1))