[342][简单] 4的幂

题目描述

342. 4的幂

给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x

示例 1:

输入:n = 16
输出:true

示例 2:

输入:n = 5
输出:false

示例 3:

输入:n = 1
输出:true

提示:

  • -231 <= n <= 231 - 1

进阶:

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

解题思路

也是用位运算的思路解题.

如果n是4的幂, 则一定也是2的幂. 因此可以先判断是否是2的幂, 判断的方法参考[231][简单] 2的幂.

如果是2的幂, 则二进制角度下, n只能有1位1. 且又要是4的幂, 4的二进制是100, 4的平方的二进制是10000. 因此1一定要出现在奇数位上. 因此我们可以创建一个mask, 偶数位为1, 奇数位为0, 这样n与这个mask相与时, 如果n是4的幂, 则结果一定为0.

由于n是一个32位的整数, mask就可以记为:

(10101010101010101010101010101010)2=(AAAAAAAA)16(10101010101010101010101010101010)_2 = (AAAAAAAA)_{16}

因此先判断是否只有一个1, 在判读1是否在奇数位上. 代码为:

class Solution:
    def isPowerOfFour(self, n: int) -> bool:
        return n > 0 and n & (n - 1) == 0 and n & 0xAAAAAAAA == 0

最后更新于

这有帮助吗?