如何判断一个正整数是否是2的整次幂

310 阅读1分钟

问题:

如果判断一个正整数是否是 2 的整次幂

解法1:

创建变量 temp 初始值为 1,与目标整数相比较,如果小于,则 temp = temp * 2 继续比较,如果相等,则目标整数为 2 的整次幂,如果大于,则目标整数不为 2 的整次幂

实现代码:

    function isPowerOfV1(num: number){
        let temp = 1;
        while(temp <= num) {
            if(temp === num) return true
            temp = temp << 1
        }
        return false
    }

时间复杂度为 O(logn)

解法2:

为 2 的整次幂的正整数都有一个特点,即:转换为 2 进制之后,除了最高位为 1,其余位都为0

例如:

2 => 10

4 => 100

6 => 110

8 => 1000

得出,当为 2 的整次幂,与其 减 1 的数,做 按位与 运算时,结果一定为 0,

实现代码

  function isPowerOfV2(num:number) {
      return (num & (num - 1)) === 0
  }

摘要总结自: 漫画算法 小灰的算法之旅