leetcode342合理运用位操作判断4的幂

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode342合理运用位操作判断4的幂相关的知识,希望对你有一定的参考价值。

Given an integer (signed 32 bits), write a function to check whether it is a power of 4.

Example:
Given num = 16, return true. Given num = 5, return false.

Follow up: Could you solve it without loops/recursion?

我的解法极其垃圾,建议不要看。

public class Solution {
    public boolean isPowerOfFour(int num) {
        if(num == 0 || (num != 1 && num % 4 != 0))
            return false;
        else if(num == 1 || num == 4)
            return true;
        else
            return isPowerOfFour(num/4);
    }
}

解释一下高手的解法。

public boolean isPowerOfFour(int num) {
        return num > 0 && (num&(num-1)) == 0 && (num & 0x55555555) != 0;
        //0x55555555 is to get rid of those power of 2 but not power of 4
        //so that the single 1 bit always appears at the odd position 
    }

要满足一个数是四的n阶指数如16,64这种,上面给出的解法意思就是要满足三个条件。

1、大于零

2、比它小1的数相与为0,简单的说,这个数的二进制表示的时候只能有一个1,其他的均为0

3、这个唯一的1必须正确的位置上面,

0x55555555 十六进制数,是01010101010101010101010101010101
和这个数相与如果结果不为那么1就在01010101010101010101010101010101的1的位置上面,只有一个1且还在这些位置上面的数都是满足条件的。

以上是关于leetcode342合理运用位操作判断4的幂的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 342. 4的幂

LeetCode 342 4的幂[循环 递归 位运算] HERODING的LeetCode之路

LeetCode342. 4的幂(C++)

[LeetCode] 342. 4的幂 ☆(是否4 的幂)

LeetCode342. 4的幂 / 第243场周赛

leetcode326.三的幂(342.四的幂/231.二的幂)