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?

二. 题目分析

题目的大意是,给定一个32位有符号整数,编写函数,判断它是否是4的幂。

进一步思考:你可以不用循环/递归解决问题吗?

从Power of Two一题中我们知道,一个数为2的幂次方时,满足:该数的二进制表示,最高位为1,其余位为0。而4的幂次方包含在此命题中,所以也是符合该条件的。

但又不同于2的幂次方数,4的幂次方还有一个特性,就是其二进制表示中,0的个数为偶数,比如:

1: 1 0的个数为0个
4: 100 0的个数为2个
16:10000 0的个数为4个
64:1000000 0的个数为6个

若使用循环,则定义一个辅助变量temp,每次移位两次(temp << 2)与输入变量num进行判断;或者将num与10101010101010101010101010101010(即0xaaaaaaaa)相与,若num & 0xaaaaaaaa != 0,表示num不为4的幂次方,此时返回false,否则返回true。

三. 示例代码

// C++,迭代版本
class Solution {
public:
    bool isPowerOfFour(int num) {
        long long temp = 1;
        while (temp < INT_MAX && num >= temp)
        {
            if (num == temp) return true;
            else if (num > temp) temp <<= 2;
        }
        return false;
    }
};
// C++,位运算,无需迭代和递归
class Solution {
public:
    bool isPowerOfFour(int num) {
        if (num > 0 && (num & (num - 1)) == 0 && (num & 0xaaaaaaaa) == 0) return true;
        else return false;
    }
};
// 位运算的Python版本
class Solution(object):
    def isPowerOfFour(self, num):
        """
        :type num: int
        :rtype: bool
        """
        return num > 0 and num & (num - 1) == 0 and num & 0xaaaaaaaa == 0

四. 小结

该题是经典的位运算题目。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值