力扣231:判断是否为2的幂数

力扣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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值