342. 4的幂

在这里插入图片描述
1.链接:

力扣传送门

2.思路:

法一:
 	求4的幂,可转换为求2的幂,只不过后者求的是二进制数只有一位为1的数,
32位中,每一位都可作为2的幂。对于前者,是奇数位可作为4的幂, 即1 3 5 7...
    我们可以先求2的幂,然后遍历奇数位上是否出现1,若出现1,则为true,反之为false
class Solution {
    public boolean isPowerOfFour(int n) {
    
        if(n<=0 || (n & n-1) !=0 ) return false;//排除不为2的幂
        
        while(n != 0) {
            if((n & 1) == 1) return true;
            n = n>>2;//移两位 1 3 5 7...
        } 
        return false;
    }
}
法二:
	符合4的幂的二进制,其唯一的1处于1 3 5 7... 中,
	而对于n-1,其二进制位为1的个数是偶数个,例如:16是1000, 15是01111
class Solution {
    //n的二进制位为1的,处于 1 3 5 7... 而对于n-1,其二进制位为1的个数是偶数个
    public boolean isPowerOfFour2(int n) {

        if(n<=0 || (n & n-1) !=0 ) return false;//排除不为2的幂
        return (Integer.bitCount(n-1) & 1) == 0;//偶数个1则为4的幂
    }
    //全部用bitCount
    public boolean isPowerOfFour(int n) {
        // n-1为1的二进制个数为偶数  n为1的二进制个数为1,即2的幂
        return (Integer.bitCount(n-1) & 1) == 0 && Integer.bitCount(n) == 1;
    }
}
法三:
	根据1,3,5,7序列,进行直接匹配	
class Solution {
    public boolean isPowerOfFour(int n) {

        if(n<=0 || (n & n-1) !=0 ) return false;//排除不为2的幂
        
        return (n & 0b01010101010101010101010101010101) == n;//直接匹配1,3,5,7
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值