给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1 输出: true 解释: 20 = 1
示例 2:
输入: 16 输出: true 解释: 24 = 16
示例 3:
输入: 218 输出: false
class Solution {
public boolean isPowerOfTwo(int n) {
if(n==1){
return true;
}
if(n%2==0&&n>0){
return isPowerOfTwo(n/2);
}
else{
return false;
}
}
}
还可以通过二进制移位。2是10,4是100,8是1000...就是只有第一位是1,其余都是0
class Solution {
public boolean isPowerOfTwo(int n) {
if(n<=0)
return false;
return countBit(n)==1;
}
public int countBit(int num){
int count=0;
while(num!=0){
count+=(num & 1);
num>>=1;//右移
}
return count;
}
}
不过这两个方法速度慢。