231. Power of Two 「2 的幂」

给定一个整数,编写一个函数检查其是否是 2 的幂。

例一:
输入: 1
输出: true
解释: 20 = 1

例二:
输入: 16
输出: true
解释: 24 = 16

例三:
输入: 218
输出: 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://www.whosneo.com/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;
    }
}