题目描述
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
示例
题解
一、while循环
代码
class Solution {
public boolean isPowerOfTwo(int n) {
while (n >= 1) {
if (n == 1) {
return true;
}
else if (!isDouble(n)) {
return false;
}
n = n / 2;
}
return false;
}
//判断当前数字奇偶
public boolean isDouble(int n) {
if ((n & 1) == 0) {
return true;
}
return false;
}
}
性能
二、利用位运算
思想
如果数字A是2的幂,那么他的二进制表达式中肯定有且只有一个1。
n & n-1可以把n最低位的1变0,而当n & n-1 == 0时,则说明n只有一个1。
注意判断数字A应该是大于0。
代码
class Solution {
public boolean isPowerOfTwo(int n) {
return (n > 0) && (n & (n - 1)) == 0;
}
}