LeetCode(65)-Power of Four

题目:

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?

思路:

  • 题意是判断一个32位的符号整数是不是4的次方
  • 对于2的次方的判断是n&(n-1)== 0
    10 => 2
    100 => 4
    1000 => 8
    10000 => 16
    100000 => 32
    1000000 => 64
    10000000 => 128
    100000000 => 256
    1000000000 => 512
    10000000000 => 1024
    100000000000 => 2048
    1000000000000 => 4096
    10000000000000 => 8192
    100000000000000 => 16384
    由图中观察可以看出来,4的次方,1都在从右往左数的奇数位,1,3,5等
    所有从2的次方移除4的次方,与上01010101010101010101010101010101,十六进制是0x555555555

代码:

public class Solution {
    public boolean isPowerOfFour(int num) {
        return num > 0 && (num&(num -1)) == 0 && (num & 0x55555555) != 0;
    }
}

你可能感兴趣的:(LeetCode,算法,面试,four,powerOf)