题目描述:
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
算法实现:
log法
/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function(n) {
return Number.isInteger(Math.log2(n))
};
递归法
/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function(n) {
while (n) {
if (n === 1) {
return true
} else {
n /= 2
}
}
return false
};
位运算
var isPowerOfTwo = function(n) {
return n > 0 && (n & (n - 1)) === 0
};
思考:
递归法和log方法都很容易想到,位运算的方法实在没想到,很精妙。
总结:
位运算又巩固了一下。