题目描述:
给定一个整数,编写一个函数来判断它是否是 2 ,3,4的幂次方.
示例 1:
- 输入: 1
- 输出: true
- 解释: 2^0 = 1
计算2的幂:解题思路
- 若 n = 2^x且 x为自然数(即 n为 2 的幂),则一定满足以下条件:
- 恒有 n & (n - 1) == 0,这是因为:
- n 二进制最高位为 1,其余所有位为 0;
- n - 1 二进制最高位为 0,其余所有位为 1;
- 一定满足 n > 0。
- 恒有 n & (n - 1) == 0,这是因为:
- 因此,通过 n > 0 且 n & (n - 1) == 0 即可判定是否满足 n = 2^x。
代码如下:
class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
}
计算3的幂:暴力
class Solution {
public boolean isPowerOfThree(int n) {
for (int i = 0; ; i++) {
if (Math.pow(3, i) == n) {
return true;
}
if (Math.pow(3, i) > n) {
return false;
}
}
}
}
计算4的幂:解题思路
代码如下:
class Solution {
public boolean isPowerOfFour(int num) {
return (num > 0) && ((num & (num - 1)) == 0) && (num % 3 == 1);
}
}