给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true
;否则,返回 false
。
整数 n
是 4 的幂次方需满足:存在整数 x
使得 n == 4x
示例 1:
输入:n = 16 输出:true
示例 2:
输入:n = 5 输出:false
示例 3:
输入:n = 1 输出:true
提示:
-231 <= n <= 231 - 1
代码
class Solution {
public:
bool isPowerOfFour(int n) {
if (n <= 0) {
return false;
}
// 步骤2: 检查n是否为2的幂次方(二进制中只有一个1)
// 原理: n & (n - 1) 会将最低位的1置0,如果结果为0,说明只有一个1
if ((n & (n - 1)) != 0) {
return false; // 不是2的幂次方,肯定不是4的幂次方
}
// 步骤3: 检查n % 3 == 1(利用4的幂次方模3等于1的特性)
// 原理: 4^k = (3+1)^k ≡ 1^k ≡ 1 (mod 3),而其他2的幂次方模3等于2
if (n % 3 == 1) {
return true; // 满足所有条件,是4的幂次方
} else {
return false; // 不满足模3条件
}
}
};