1.幂和对数
① 231. 2 的幂
一个数如果是 2 的指数,那么它的二进制表示一定只含有一个 1:
2^0 = 1 = 0b0001
2^1 = 2 = 0b0010
2^2 = 4 = 0b0100
如果使用 n&(n-1)
的技巧就很简单了(注意运算符优先级,括号不可以省略):
//lowbit
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && (n & -n) == n;
}
};
② 326. 3的幂
// 在int范围内3的最大整次幂是3^19 = 1162261467,所以如果n是3
//的整次幂的话那肯定被它%0
class Solution {
public:
bool isPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
};
③ 342. 4的幂
// 4^k = 2^2k
// ① 是否大于0 ② 是不是只有2是因子 ③ 是否是平方数
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;
// return 1073741824 %n == 0;
// return (n & -n) == n;
}
};