位运算解法
class Solution {
public boolean isPowerOfTwo(int n) {
if(n>0&&n&(n-1)==0){
return true;
}
return false;
}
}
因为n和n-1的按位与为0,所以只需要判断按位与是不是0即可。但需要判断特殊情况,如n<=0情况。
通用解法
class Solution {
public boolean isPowerOfThree(int n) {
if (n <= 0) return false;
while (n % 3 == 0) {
n /= 3;//根据情况改成2、3、4
}
return n == 1;
}
}
这种解法的思路主要是:当个方法通过不断除以3来尝试“缩小”输入的整数,如果最终能够缩小到1,那么这个数就是3的幂次方。如果在过程中 n
变为了一个不能被3整除的数,循环会停止,这时 n 不是3的幂次方,返回false,例如6。