342. 4的幂
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true
;否则,返回 false
。
整数 n
是 4 的幂次方需满足:存在整数 x
使得 n == 4x
示例 1:
输入:n = 16
输出:true
示例 2:
输入:n = 5
输出:false
示例 3:
输入:n = 1
输出:true
思路:暴搜,超过时间限制,将x的范围降到log级别使用二分查找,或将n设为x的根号。
这里给出位运算的两种解法。
思路一:
判断是4的幂,首先要满足2的幂
即 n&(n-1)==0
其次我们发现
4:100 --------------->4出现在第3位
16:10000 -------------->16出现在第5位
因为int 数据类型最多32位,我们只需要判断在偶数的前提下,奇数位是否为一即可,(通过&1去判断)
我们可以用0xaaaaaaaa去进行与运算
思路二:
依次将1右左移两位,最多移32位进行判断
code1:
class Solution {
public boolean isPowerOfFour(int n) {
return n > 0 && (n & 0xaaaaaaaa) == 0;
}
}
code2:
class Solution {
public boolean isPowerOfFour(int n) {
for(int i=0;i<32;i+=2){
if(1<<i==n) return true;
}
return false;
}
}
code3(暴搜)
class Solution {
public boolean isPowerOfFour(int n) {
if(n==1){
return true;
}
for(int i=0;i<(int)Math.sqrt(n);i++){
if(Math.pow(4,i)==n){
return true;
}
}
return false;
}
}