博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Power of Four 判断4的次方数
阅读量:6074 次
发布时间:2019-06-20

本文共 1288 字,大约阅读时间需要 4 分钟。

 

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?

Credits:

Special thanks to for adding this problem and creating all test cases.

 

这道题让我们判断一个数是否为4的次方数,那么最直接的方法就是不停的除以4,看最终结果是否为1,参见代码如下:

 

解法一:

class Solution {public:    bool isPowerOfFour(int num) {        while (num && (num % 4 == 0)) {            num /= 4;        }        return num == 1;    }};

 

还有一种方法是跟中的解法三一样,使用换底公式来做,讲解请参见之前那篇博客:

 

解法二:

class Solution {public:    bool isPowerOfFour(int num) {        return num > 0 && int(log10(num) / log10(4)) - log10(num) / log10(4) == 0;    }};

 

下面这种方法是网上比较流行的一种解法,思路很巧妙,首先根据中的解法二,我们知道num & (num - 1)可以用来判断一个数是否为2的次方数,更进一步说,就是二进制表示下,只有最高位是1,那么由于是2的次方数,不一定是4的次方数,比如8,所以我们还要其他的限定条件,我们仔细观察可以发现,4的次方数的最高位的1都是计数位,那么我们只需与上一个数(0x55555555) <==> 1010101010101010101010101010101,如果得到的数还是其本身,则可以肯定其为4的次方数:

 

解法三:

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

或者我们在确定其是2的次方数了之后,发现只要是4的次方数,减1之后可以被3整除,所以可以写出代码如下:

 

解法四:

class Solution {public:    bool isPowerOfFour(int num) {        return num > 0 && !(num & (num - 1)) && (num - 1) % 3 == 0;    }};

 

类似题目:

 

参考资料:

 

转载地址:http://mcxgx.baihongyu.com/

你可能感兴趣的文章
java基础---->正则表达式
查看>>
2.2013/06/13_log(n)+1
查看>>
关于加载iframe时进度条不消失的问题
查看>>
poj 3984迷宫问题【广搜】
查看>>
oracle ORA-01840:输入值对于日期格式不够长
查看>>
python基础知识~logger模块
查看>>
SIP入门(二):建立SIPserver
查看>>
Servlet3.0的异步
查看>>
WebService连接postgresql( 失败尝试)
查看>>
从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?...
查看>>
Python-MacOSX下SIP引起的pip权限问题解决方案(非取消SIP机制)
查看>>
从MFQ方法到需求分析
查看>>
android.view.WindowManager$BadTokenException: Unable to add window
查看>>
HDU5012:Dice(bfs模板)
查看>>
iphone openssh
查看>>
Linux下MEncoder的编译
查看>>
Xamarin使用ListView开启分组视图Cell数据展示bug处理
查看>>
Javascript中闭包(Closure)的探索(一)-基本概念
查看>>
spark高级排序彻底解秘
查看>>
ylbtech-LanguageSamples-PartialTypes(部分类型)
查看>>