方法1: 最简单想到的logn算法。把n不停的除以2,最后得到1就是true,不是1就是false。时间复杂logn,空间1.
class Solution {
public boolean isPowerOfTwo(int n) {
long N = n;
return helper(N);
}
private boolean helper(long n){
if(n < 0) return false;
if(n == 0) return false;
if(n == 2 || n == 1) return true;
if(n % 2 != 0){
return false;
}else{
return helper(n / 2);
}
}
}
方法2: 利用二进制表示n,然后如果是power of 2,然后(n的二进制) & (-n的二进制)应该为n。时间复杂1.空间复杂1.
class Solution {
public boolean isPowerOfTwo(int n) {
if (n == 0) return false;
long x = (long) n;
return (x & (-x)) == x;
}
}
总结:
- 无