231. Power of Two

Given an integer, write a function to determine if it is a power of two.

Example 1:

Input: 1
Output: true 
Explanation: 20 = 1

Example 2:

Input: 16
Output: true
Explanation: 24 = 16

Example 3:

Input: 218
Output: false

M1: count how many bits are 1s, if # of 1s == 1, return true

time = O(# of bits), space = O(1)

class Solution {
    public boolean isPowerOfTwo(int n) {
        return n > 0 && countOnes(n) == 1;
    }
    
    public int countOnes(int n) {
        int cnt = 0;
        while(n > 0) {
            cnt += (n & 1);
            n >>= 1;
        }
        return cnt;
    }
}

M2: directly

time = O(1), space = O(1)

class Solution {
    public boolean isPowerOfTwo(int n) {
        return n > 0 && (n & (n - 1)) == 0;
    }
}
原文地址:https://www.cnblogs.com/fatttcat/p/11400316.html