Leetcode 342. Power of Four
题目链接: Power of Four
难度:Easy
题目大意:
输入一个非负整数,判断是否是4的次幂。
思路:
思路1:
先判断是否为0,如果不为0则对4取余,如果余数不为0,返回false,否则除以4再继续判断。用到while循环,如果这个数是4的次幂且非常大,这种方法比较费时间。
思路2(参考高赞回答):
用位运算。
如果num&(num-1)==0说明num是2的次幂,我不会严格的证明,可以举几个例子来理解这个性质。
如果num是4的次幂,那么(num-1)%3=0。证明如下:每3个连续的整数必有一个是3的倍数 ,
2
n
−
1
2^n-1
2n−1,
2
n
2^n
2n,
2
n
+
1
2^n+1
2n+1这3个数必然有一个数是3个倍数,
2
n
2^n
2n是不是3个倍数,则剩下的两个数必有一个是3的倍数,则
4
n
−
1
=
(
2
n
−
1
)
∗
(
2
n
+
1
)
4^n-1=(2^n-1)*(2^n+1)
4n−1=(2n−1)∗(2n+1)是3的倍数。
代码
思路1:
class Solution {
public boolean isPowerOfFour(int num) {
if(num==0){
return false;
}
while(num!=1){
if(num%4!=0){
return false;
}
else{
num/=4;
}
}
return true;
}
}
思路2:
class Solution {
public boolean isPowerOfFour(int num) {
return num>0&&(num&(num-1))==0&&(num-1)%3==0;
}
}