Leetcode 342. Power of Four(两种方法)

Leetcode 342. Power of Four

题目链接: Power of Four

难度:Easy

题目大意:

输入一个非负整数,判断是否是4的次幂。

思路:

思路1:

先判断是否为0,如果不为0则对4取余,如果余数不为0,返回false,否则除以4再继续判断。用到while循环,如果这个数是4的次幂且非常大,这种方法比较费时间。

思路2(参考高赞回答):

用位运算。
如果num&(num-1)==0说明num是2的次幂,我不会严格的证明,可以举几个例子来理解这个性质。
如果num是4的次幂,那么(num-1)%3=0。证明如下:每3个连续的整数必有一个是3的倍数 , 2 n − 1 2^n-1 2n1 2 n 2^n 2n 2 n + 1 2^n+1 2n+1这3个数必然有一个数是3个倍数, 2 n 2^n 2n是不是3个倍数,则剩下的两个数必有一个是3的倍数,则 4 n − 1 = ( 2 n − 1 ) ∗ ( 2 n + 1 ) 4^n-1=(2^n-1)*(2^n+1) 4n1=2n1(2n+1)是3的倍数。

代码

思路1:
class Solution {
    public boolean isPowerOfFour(int num) {
        if(num==0){
            return false;
        } 
        while(num!=1){
             if(num%4!=0){
                 return false;
             }
             else{
                 num/=4;
             }
         }
        return true;
    }
}
 
思路2:
class Solution {
    public boolean isPowerOfFour(int num) {
         return num>0&&(num&(num-1))==0&&(num-1)%3==0;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值