给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。 整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x 示例 1: 输入:n = 16 输出:true 示例 2: 输入:n = 5 输出:false 示例 3: 输入:n = 1 输出:true 提示: -231 <= n <= 231 - 1 进阶: 你能不使用循环或者递归来完成本题吗? Related Topics 位运算 递归 数学
只要满足n&n-1 == 0 ,这个数就是2的幂次方
如果2的x次方等于n
那么10...000(x个0)等于n
111...111(x个1)等于n-1
10000000 &
01111111的结果为0
4^x=(3+1)^x
(3+1)^x的展开式为:3^x+3^(x-1)*1+3^(x-2)*1^2+...+3*1^(x-1)+1^x
所以4^x % 3必定等于1
但是 n%3==1的数n未必就是4的幂,比如10
4^x=(2+2)^x=2^2x
所以满足(n&n-1)==0and(n%3==1)的数n就是4的幂
class Solution {
public boolean isPowerOfFour(int n) {
if(n < 1)
return false;
return (n&n-1)==0&&n%3==1;
}
}