程序员社区

LeetCode231 2的幂

目录

题目

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。

-2^31 <= n <= 2^31-1

思路

首先n > 0

n化成二进制后只有一个1,则n就是2的幂

使用位运算,将n的二进制中最低位的那个1提取出来,再判断剩余的数值是否为0即可

提取方法:n & (n-1)

原理:将n的二进制表示为 (a10⋯0)​,其中 a 表示若干个高位,1 表示最低位的那个 1,0⋯0 表示后面的若干个0,则 n−1 的二进制表示为(a01⋯1),n和n-1做个按位与即可。

class Solution {
    public boolean isPowerOfTwo(int n) {
       return n > 0 && (n & (n-1)) == 0;
    }
}
赞(0) 打赏
未经允许不得转载:IDEA激活码 » LeetCode231 2的幂

一个分享Java & Python知识的社区