231. 2 的幂
如果一个数是2的幂 那他转成二进制那肯定只会有一个1 并且1是在最前面的和这个数减1的数做且运算那必定是0.
比如8的二进制是1000 7的二进制是0111 他们做且运算得出的就是0
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n < 1) {
return false;
}
return (n & n - 1) == 0;
}
};
列出所有剩下几的幂都可以这样做就是要考虑范围
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n == 1) {
return true;
}
if (n <= 0 ) {
return false;
}
unsigned int k = 1;//范围2的三十二次方-1
int i;
for ( i = 1; i < 31; ++i) {
k *= 2;
if (k == n) return true;
}
return false;
}
};
326. 3 的幂
n 对 3 进行试除,直到 n 不再与 3 呈倍数关系,最后判断 n 是否为 3^0 = 1
class Solution {
public boolean isPowerOfThree(int n) {
if (n <= 0) return false;
while (n % 3 == 0) n /= 3;
return n == 1;
}
}
class Solution {
public:
bool isPowerOfThree(int n) {
if (n == 0) return false;
if (n == 1) return true;
unsigned int k = 1;
int i;
for (i = 1; i <= 20;++i) {
k *= 3;
if (k == n) return true;
}
return false;
}
};
- 用n对4取余,如果余数不为0,那肯定不是,如果余数为0就n = n / 4 继续上述过程,直到n = 1,即为4的幂
- n ==0的时候,返回false
class Solution {
public:
bool isPowerOfFour(int n) {
if (n == 0) return false;
while (n != 1) {
if (n % 4 != 0) return false;
n = n / 4;
}
return true;
}
};
class Solution {
public:
bool isPowerOfFour(int n) {
if (n == 0) return false;
if (n == 1) return true;
unsigned int k = 1;
int i;
for (i = 1; i<=16; ++i) {
k *= 4;
if(k == n) return true;
}
return false;
}
};