【力扣】数的幂系列
Leetcode 0231 2的幂
题目描述:Leetcode 0231 2的幂
分析
-
本题的考点:位运算。
-
如果一个数是2的幂,则这个数一定大于0,;考虑2的幂的二进制形式,二进制表示中只有一个1,其余位置都是0,因为我们可以使用
lowbit
操作返回最低位的1,如果一个数2的幂则有n & -n==n
。
代码
- C++
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && (n & -n) == n;
}
};
- Java
class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & -n) == n;
}
}
时空复杂度分析
-
时间复杂度: O ( 1 ) O(1) O(1)。
-
空间复杂度: O ( 1 ) O(1) O(1)。
Leetcode 0326 3的幂
题目描述:Leetcode 0326 3的幂
分析
-
本题的考点:数学。
-
int
范围内最大的3的幂为: 3 19 = 1162261467 3^{19} = 1162261467 319=1162261467,当n > 0 && 1162261467 % n == 0
时n
是3的幂次。
代码
- C++
class Solution {
public:
bool isPowerOfThree(int n) {
// int范围内最大的3的幂为:3^19 = 1162261467
return n > 0 && 1162261467 % n == 0;
}
};
- Java
class Solution {
public boolean isPowerOfThree(int n) {
// int范围内最大的3的幂为:3^19 = 1162261467
return n > 0 && 1162261467 % n == 0;
}
}
时空复杂度分析
-
时间复杂度: O ( 1 ) O(1) O(1)。
-
空间复杂度: O ( 1 ) O(1) O(1)。
Leetcode 0342 4的幂
题目描述:Leetcode 0342 4的幂
分析
-
本题的考点:数学。
-
n
是4
的整数次幂,等价于n
是平方数,且n
的质因子只有2
。 -
int
范围内,2
的最大的整数次幂是 2 30 2^{30} 230,所以n
的质因子只有2
,等价于n
能整除 2 30 2^{30} 230。 -
这里必须判断是否是平方数,否则只判断能否被整除的话,
8
会被判定成是4
的幂。
代码
- C++
class Solution {
public:
bool isPowerOfFour(int n) {
if (n <= 0) return false;
int r = sqrt(n);
if (r * r != n) return false;
return (1 << 30) % n == 0;
}
};
- Java
class Solution {
public boolean isPowerOfFour(int n) {
if (n <= 0) return false;
int r = (int) Math.sqrt(n);
if (r * r != n) return false;
return (1 << 30) % n == 0;
}
}
时空复杂度分析
-
时间复杂度: O ( 1 ) O(1) O(1)。
-
空间复杂度: O ( 1 ) O(1) O(1)。