每天一道算法题-4的幂【备战蓝桥】2022/3/27

题目描述

在这里插入图片描述

原题链接:4的幂

思路

方法一 暴力

1、从头开始计算,每次乘以4,直到变量的值大于等于4,
2、如果等于4返回true,否则返回false;
显然超时了…

代码

class Solution {
    public boolean isPowerOfFour(int n) {
        if(n<=0) return false;
        int i=1;
        while(i<n){
            i=i*4;
        }
        if(i==n){
            return true;
        }else{
            return false;
        }
    }
}

方法二 打表

打表:
提前写一个函数计算所有范围内的4的幂,最后算出来有16个,然后存储起来,每次判断n有没有出现在表中即可。

代码

class Solution {
    public boolean isPowerOfFour(int n) {
        //打表,提前计算出4的幂
        int[] target={1, 4, 16, 64, 256, 1024, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216, 67108864, 268435456, 1073741824};
        for(int i=0;i<target.length;i++){
            if(target[i]==n){
                return true;
            }
        }
        return false;
    }
}

这个代码不需要提交

public  class Main{
    public static void main(String[] args) {
        //统计4的幂
        long n=1;
        LinkedList<Long> list=new LinkedList<>();
        while(n<Integer.MAX_VALUE){
            list.add(n);
            n=n*4;
        }
        System.out.println(list.size());
        System.out.println(list);
    }
}

方法三 位运算

⭐首先用位运算检查它是不是2的幂,具体方法看昨天的题:2的幂
⭐4的幂也是2的幂,但与2的幂的区别是:4的幂在二进制表示下只有一个1且这个1只出现在奇数位上
⭐所以可以设法校验该数的“1”在奇数位还是在偶数位,具体方法如下:
⭐思想:消除掉奇数位上的0,然后检验结果是不是0,若是0,说明它的“1”在奇数位上,被消掉了,那它就是4的幂;若它不是0,说明“1”在偶数位上,那它就不是4的幂。
实现:让待检测数与0x55555555做与运算,实现将待检测数偶数位上的1去除
0x55555555表示这是一个16进制的数,转化为2进制是这样的:010101010101…一共32位,32位是因为-231 <= n <= 231 - 1

代码

class Solution {
    public boolean isPowerOfFour(int n) {
        if(n<=0) return false;
        //首先判断它是不是2的幂
        if((n&(n-1))==0){
            //进一步判断它是不是4的幂
            return (n&0x55555555)!=0;
        }
        return false;
    }
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值