Cosen95 / js_algorithm

🏂js数据结构与算法 系统学习
36 stars 10 forks source link

2的幂 #53

Open Cosen95 opened 4 years ago

Cosen95 commented 4 years ago

leetcode: https://leetcode-cn.com/problems/power-of-two/

Cosen95 commented 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
};