Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
231. 2 的幂 - 力扣(LeetCode) (leetcode-cn.com)
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
示例 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)