js_algorithm
js_algorithm copied to clipboard
2的幂
leetcode: https://leetcode-cn.com/problems/power-of-two/
思路分析
比较常规的,就是不断除以2,判断最终结果是否为1,对应递归法
。
我们考虑一下有没有更快的解决方式:观察2^0、2^1、2^2......2^n,它们的二进制表示为1、10、100、1000、10000......
判断一个数是否是2的n次幂,也就是判断二进制表示中是否只有一位是1且在最前面那位的位置。例如n=00010000,那n-1=00001111,即n&(n-1)==0
由此就可以判断啦!
代码实现
递归
/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function(n) {
if (n < 1){
return false;
}
if (n == 1) {
return true;
}
if (n % 2 > 0) {
return false;
}
return isPowerOfTwo(n / 2);
};
位运算
/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function(n) {
return n > 0 && (n & (n-1)) === 0
};