原题链接:https://leetcode.com/problems/power-of-four/
思路:首先判断是否是2的幂,如果是的话,再去判断是否为4的幂,判断2的幂要求整数的bit位中只有一个1,而这可以根据num & (num -1)来判断。
得到结果后,最佳的方案是能找到1后面有多少个0,然后这个个数对2取余,如果为0,表示可以整除。但是我没找到方法。
public class Solution {
public boolean isPowerOfFour(int num) {
if(num < 0)
return false;
int tmp = num-1;
if((tmp & num) == 0){
while(num != 0 && num != 1){
num = num >> 2;
}
if(num == 1)
return true;
}
return false;
}
}
2、在网上看到了一种做法:思想是如果一个数为4的倍数,那么这个数-1一定可以被3整除,可以用数学归纳法很容易得到证明。
public class Solution {
public boolean isPowerOfFour(int num) {
if(num < 0)
return false;
int tmp = num-1;
return (num & tmp) == 0 && tmp % 3 == 0;
}
}