231. Power of Two #
题目 #
给定一个整数 n
,判断该整数是否是 2
的幂次方。如果是,返回 true
;否则,返回 false
。
如果存在一个整数 x
使得 n == 2^x
,则认为 n
是 2
的幂次方。
思路 #
- 对于数字
2^x
,当且仅当加数不小于2^x
时,和才不小于2^(x+1)
- 若
n
的二进制表示中存在不止一个1
,则该整数不是2
的幂次方。
代码 #
较繁琐的实现 #
class Solution {
public boolean isPowerOfTwo(int n) {
if (n <= 0) return false;
boolean flag = false;
for (int i = 31; i >= 0; i--) {
if (((n >> i) & 1) == 1) {
if (flag == false) flag = true;
else return false;
}
}
return true;
}
}
利用位运算简化代码 #
class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & n-1) == 0;s
}
}