力扣231:判断是否为2的幂数
第一个方法肯定是通过循环一直模余\除 2来遍历n,最终找到n是否为1或2
if(n<=0) return false;
while(n!=1 || n!=2){
if(n % 2 != 0) return false;
n >>= 1;
}
return true;
解题思路
首先可以通过一直循环找到是否为2的幂次
但是可以通过分析2的次幂的二进制发现,2的次幂的二进制只有一个1
也就是判断1的个数,也就是 学习笔记
通过 n &= (n-1) 或者是 &1 的形式来判断有多少个1
最后如果只有一个1,那么也即是2的次幂
int count=0;
if(n<=0) return false;
while(n!=0){
n &= (n-1);
count++;
}
if(count==1)
return true;
return false;
同时既然2的次幂只有一个1,那么直接返回就可以了
if(n<=0) return false;
return (n &= n-1)==0;
代码
class Solution {
public boolean isPowerOfTwo(int n) {
// 用判断1的个数来判断是否为2的幂次
// 二的幂次只有一个1,所以通过判断1的个数来判断是否为二的幂次
// 同时需要更进一步的考虑到,就只有一个1,那么如果n是二的多少次幂,那么也就是在二进制中,减掉这个1后,就是为0
// 也就是
/**
if(n<0) return false;
return (n&(n-1)==0);
*/
/**
int count=0;
if(n<0) return false;
while(n!=0) {
n &= (n-1);
count++;
}
if(count==1)
return true;
return false;
*/
if(n<=0) return false;
return (n & (n-1) )==0;
}
}
再次复习了求二进制中1的个数的方法
- 一个数n与上其减一的数n-1,会将其二进制中的最后一个1去掉
- 一个数通过&1进行判断最后一位二进制位是否为1