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

这个题和第 191 题的原理相同,只需要进行位运算就可以判断了。原因是,2 的幂的二进制形式最高位为 1,其余位均为 0,而 n & (n - 1) 这个操作直观来看刚好可以消去这个数字二进制形式中最右的 1,若此数是 2 的幂,一步计算之后唯一的 1 便也没有了,结果为 0。我们便可以利用这个性质来判断此数是否是 2 的幂。

/*
 * 231. Power of Two
 * https://leetcode.com/problems/power-of-two/
 * https://realneo.me/231-power-of-two/
 */

public class IsPowerOfTwo {
    public static void main(String[] args) {
        IsPowerOfTwo solution = new IsPowerOfTwo();

        System.out.println(solution.isPowerOfTwo(36));
        System.out.println(solution.isPowerOfTwo(64));
        System.out.println(solution.isPowerOfTwo(127));
    }

    private boolean isPowerOfTwo(int n) {
        return n > 0 && (n & (n - 1)) == 0;
    }
}