面试高频手撕题 | 13.判断一个数是否是 2 的幂次方

alt

一、知识点

  • 2的幂次方特点:将其转换为二进制后,只有最高位是1,其他位都是0。

二、思路分析

  1. 方法一:位运算

    function isPowerOfTwo(n) {
      return n &&!(n & (n - 1));
    }
    
    • 定义函数isPowerOfTwo,它使用数字n作为参数,如果n是2的幂次方,则返回true
    • 如果n不为正,则返回false
    • 如果n为正,则计算n&(n –1)。如果表达式等于n,最右边的设置位被清除,即,将n的二进制表示形式中最右边的1设为0。
    • 所有2的幂在二进制表示中只有一个置位,而只有一个置位的所有数字都是2的幂。因此,如果n是2的幂,则n&(n –1)将等于零。这用于确定如果n为正,n是否为2的幂。
  2. 方法二:循环除法

    function isPowerOfTwo(n) {
      if (n <= 0) {
        return false;
      }
      while (n % 2 === 0) {
        n /= 2;
      }
      return n === 1;
    }
    
    • 定义函数isPowerOfTwo,它使用数字n作为参数,如果n是2的幂次方,则返回true
    • 如果n小于等于0,则返回false
    • 使用循环,不断将n除以2,直到不能再被2整除为止。
    • 如果最终的结果为1,则说明n是2的幂次方,返回true
    • 否则,返回false

三、JavaScript 解答

在 JavaScript 中,可以通过以下两种方法来判断一个数是否是2的幂次方:

  1. 使用位运算:

    function isPowerOfTwo(n) {
      return n &&!(n & (n - 1));
    }
    

    这个函数使用了按位与操作符 & 来检查数字 n 是否是2的幂次方。如果 n 是2的幂次方,

  2. 使用循环除法:

    function isPowerOfTwo(n) {
      if (n <= 0) {
        return false;
      }
      while (n % 2 === 0) {
        n /= 2;
      }
      return n === 1;
    }
    

    这个函数使用了一个循环,不断将 除以2,直到不能再被2整除为止。如果最终的结果为1,则说明

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024前端面试高频手撕题 文章被收录于专栏

2024前端面试高频手撕题的作用包括但不限于提升面试竞争力、检验基础知识掌握程度、提高问题解决能力等。本专栏从知识点,思路分析,JavaScript解答,Java解答,总结等五个方面全方面解答。适用于:准备前端开发岗位面试的求职者、希望提升前端开发技能和知识的学习者、准备升职或跳槽的前端开发人员。掌握面试高频手撕题都是非常有益的,它能够帮助你建立起扎实的前端基础知识和问题解决能力。

全部评论
学习了,学无止境
点赞 回复 分享
发布于 2024-01-14 18:17 广东

相关推荐

ldf李鑫:不说公司名祝你以后天天遇到这样的公司
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务