力扣(LeetCode)4的幂 个人题解

给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。

示例 1:

输入: 16
输出: true

示例 2:

输入: 5
输出: false

进阶:
你能不使用循环或者递归来完成本题吗?

 

这题本质上还是一个数学问题,考察的是二进制的一些操作。因为4的幂一定是2的幂,且二进制后,其1的位置一定出现在奇数位。

如 4: 0100   16:10000

所以思路很清晰了。首先判断是不是2的幂,然后再判断其1的位置是不是在奇数位。判断的方法是将这个数与 0x55555555 相与 。这样奇数位上一旦有1 ,结果必为非零。

当然这种比较取巧的方法我是看了评论区才知道的。一般的做法是用移位来逐个判断,类似。

 

代码如下:

class Solution {
    public boolean isPowerOfFour(int num) {
       if (num<0 || (num & (num-1))!=0) 
           return false;
       int i=(num & 0x55555555);
       System.out.println(i);
       return i>1;
    }
}

 

posted @ 2019-03-15 20:51  AXiangCoding  阅读(245)  评论(0编辑  收藏  举报