一、题目
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
示例 1:
输入:n = 1
输出:true
解释:2^0 = 1
提示:
-2^31 <= n <= 2^31 - 1
二、思路
1 将传入的数n,分别与2的幂次按位与
2 最终按位与的结果只有1次不是0就返回true,出现1次以上就返回false
3 【注意】:这里int 32位可能会超出位数限制,改为long 64位即可。
三、代码
class Solution {
public boolean isPowerOfTwo(int n) {
if (n <= 0) return false;
if (n == 1) return true;
int temp = 0;
long i = 1;
while (i <= n) {
if ((n & i) != 0) temp++;
if (temp > 1) return false;
i <<= 1;
}
return true;
}
}