Open Cosen95 opened 4 years ago
比较常规的,就是不断除以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
};
leetcode: https://leetcode-cn.com/problems/power-of-two/