【刷题笔记】231. 2 的幂

127 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

231. 2 的幂 - 力扣(LeetCode) (leetcode-cn.com)

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

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

示例 1:

输入:n = 1
输出:true
解释:20 = 1

示例 2:

输入:n = 16
输出:true
解释:24 = 16

示例 3:

输入:n = 3
输出:false

示例 4:

输入:n = 4
输出:true

示例 5:

输入:n = 5
输出:false

提示:

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

二、思路分析:

若n为2的幂,则一定满足以下条件:

恒有n & n(n - 1) == 0,原因如下:

  • n 二进制最高位为1,其余所有位为0;
  • n - 1 二进制最高位为0,其余所有位为1;

所以通过

n > 0 && (n & (n-1)) == 0可以判断是否满足n为2的幂

三、AC 代码:

var isPowerOfTwo = function(n) {
    return n > 0 && (n & (n - 1)) === 0;
};

四、总结:

本题虽然有其他取巧的解法,但是重点的还是这个位运算,这个直接想可能有点困难,需要我们自己去实践下,如果不是太会的话,可以参考下题解区,好多大佬都是给了动图,表格什么的,非常详细。

五、参考:

2 的幂 (位运算,极简解法+图表解析) - 2 的幂 - 力扣(LeetCode) (leetcode-cn.com)

【2的幂】:位运算图解 - 2 的幂 - 力扣(LeetCode) (leetcode-cn.com)