首页 > 代码库 > leetcode342合理运用位操作判断4的幂
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的幂
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。