给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例1:
输入: 1
输出: true
解释: 2^0 = 1
示例2:
输入: 16
输出: true
解释: 2^4 = 16
示例3:
输入: 218
输出: false
这个题首先可以按定义解,循环计算n对2的余数,一旦不为零就不是2的幂,然后用n整除2再进行计算判断。直到最后n等于1时说明是2的幂。
C++源代码:
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n==0)
return false;
while (n!=1)
{
if (n%2 != 0)
return false;
n = n / 2;
}
return true;
}
};
还有一种新颖的解法就是如果是2的次幂,那么用二进制数表示必然只有1位为1。然后这个数减1之后就会除那一位外都为1。所以可以用n和n-1相与,结果是0,那么就是2的幂,不为0就不是。
python3源代码:
class Solution:
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
if n == 0:
return False
if (n & (n-1)) == 0:
return True
else:
return False