LeetCode 342——4的幂

一、题目介绍

给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。

示例 1:

输入: 16
输出: true
示例 2:

输入: 5
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-of-four
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

方法有很多种,本文给出了一种常规方法,可以直接看代码很容易理解,这里不做赘述。下面介绍一种不用递归和迭代的求解方法。

(1)首先我们知道2的幂满足:x > 0 and x & (x - 1) == 0。且4的幂一定是2的幂,反之则不然。

(2)其次不难发现,2的偶数次幂同为4的幂,而2的奇数次幂则不是4的幂。在这两种情况中,都只有一位为1,其余位为0.

(3)在偶数次幂的情况中,1处于二进制中偶数的位置:第0位、第2位、第4位等;在奇数次幂的情况中,1处于奇数位置。因此如果x满足2的幂的同时,满足:x &  10101010  10101010   10101010   10101010 == 0,则为4的幂。用十六进制表示则为x & aaaaaaaa == 0。

三、解题代码 

//常规方法
class Solution {
public:
    bool isPowerOfFour(int num) {
        if(num == 1)
            return true;
        while(num >= 4 && num % 4 == 0)
        {
            num /= 4;
        }
        return num == 1;
    }
};


//位运算方法
class Solution {
public:
    bool isPowerOfFour(int num) {
        return num > 0 && (num & (num-1)) == 0 && (num & 0xaaaaaaaa) == 0;
    }
};

四、解题结果

发布了139 篇原创文章 · 获赞 122 · 访问量 4710

猜你喜欢

转载自blog.csdn.net/qq_39661206/article/details/103923631