LeetCode 342.Power of Four(n&(n-1)、0x55555555)

六眼飞鱼酱① 提交于 2020-01-22 03:08:50

题目链接:点击这里
在这里插入图片描述

  • 1:1
  • 2:10
  • 4:100
  • 8:1000
  • 16:10000

可以在 22 的幂的基础上筛选出 44 的幂,即判断 11 是在奇数位还是偶数位。可以借助于按位与运算和0x55555555筛选出 11 的位置。

下述具有特殊二进制的整数,可以很方便进行位操作,而且该整数的十六进制形式比较好记,也不用写那么多的0、1:

0xaaaaaaaa = 10101010101010101010101010101010 (偶数位为1,奇数位为0)

0x55555555 = 1010101010101010101010101010101 (偶数位为0,奇数位为1)

0x33333333 = 110011001100110011001100110011 (1和0每隔两位交替出现)

0xcccccccc = 11001100110011001100110011001100 (0和1每隔两位交替出现)

0x0f0f0f0f = 00001111000011110000111100001111 (1和0每隔四位交替出现)

0xf0f0f0f0 = 11110000111100001111000011110000 (0和1每隔四位交替出现)

class Solution {
public:
    bool isPowerOfFour(int num) {
        if(num<=0)  return false;
        return (num&(num-1))==0 && num&0x55555555;
    }
};
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!