题目描述
难度级别:简单
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
解题思路
法一
当整数n大于1时,对其进行迭代,通过对连续2取模判断是否等于0,当遇到不为0时,直接输出false。
const isPowerOfTwo = function(n) {
if (n === 0) return false
while(n > 1) {
if (n % 2 !== 0) return false
n /= 2
}
return true
};
- 优化代码
const isPowerOfTwo = function(n) {
if (n < 1) return false
while(n % 2 == 0) n /= 2
return n === 1
};
位运算
通过n & (n - 1) 是否为0进行判断。因为一个数是2的幂次方,则这个2进制数必然只有一个1,若求x-1,则它的1位变为0,1后面的0位变为1,在求与运算,这是值为0。
const isPowerOfTwo = function(n) {
return n > 0 && (n & (n - 1)) === 0;
};
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-of-two