Leetcode 231. Power of Two

GoodJobJasper發表於2020-12-31

在這裡插入圖片描述
方法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;
  }
}

總結:

相關文章