Leetcode题目: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?

需要注意的是,本题需要我们不使用循环或递归,因而很自然地想到了关于位操作的方法。

观察以下数列:

0 ---二进制--->    0     *

1 ---二进制--->    1

2 ---二进制--->    10

3 ---二进制--->    11

4 ---二进制--->    100     *

5 ---二进制--->    101

6 ---二进制--->    110

7 ---二进制--->    111

8 ---二进制--->    1000     *    

9 ---二进制--->    1001

10 ---二进制--->    1010

11 ---二进制--->    1011

12 ---二进制--->    1100

13 ---二进制--->    1101

14 ---二进制--->    1110

15 ---二进制--->    1111

16 ---二进制--->    10000     *

可以发现,所有是4的倍数的数字,它们的二进制都仅有一个1,剩余都是0。并且,需要注意的是,这些1都是在奇数为分布。

根据以上条件,可以给出如下的代码:

class Solution {
public:
    bool isPowerOfFour(int num) {
        int num_minus = num - 1;
        if((num & num_minus) == 0)
        {
            if((num & 0x55555555) != 0)
            {
                return true;
            }
        }
        return false;
    }
};

 

转载于:https://www.cnblogs.com/CodingGirl121/p/5408444.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值