231 - 2的幂(power-of-two)

Create by jsliang on 2019-07-15 15:41:43
Recently revised in 2019-07-15 19:14:46

一 目录

不折腾的前端,和咸鱼有什么区别

目录
一 目录
二 前言
三 解题
3.1 解法 - 暴力破解
3.2 解法 - 无脑梭哈

二 前言

返回目录

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

示例 1:
输入: 1
输出: true
解释: 20 = 1

示例 2:
输入: 16
输出: true
解释: 24 = 16

示例 3:
输入: 218
输出: false

三 解题

返回目录

小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。

3.1 解法 - 暴力破解

返回目录

  • 解题代码
var isPowerOfTwo = function(n) {
  if (n === 1 || n === 2) {
    return true;
  }
  while (n > 2) {
    n = n / 2;
    if (n === 2) {
      return true;
    }
  }
  return false;
};
  • 执行测试

  • n16

  • returntrue

  • LeetCode Submit

✔ Accepted
  ✔ 1108/1108 cases passed (84 ms)
  ✔ Your runtime beats 99.6 % of javascript submissions
  ✔ Your memory usage beats 23.18 % of javascript submissions (35.5 MB)
  • 解题思路

将这个数一直除于 2,当它的值接近 2 时,它有两种可能:

  1. 等于 2,即这个数它刚好是 2 的幂。
  2. 小于 2,即这个数不是 2 的幂。

最后,直接判断返回即可。

简单到 jsliang 无力吐槽

3.2 解法 - 无脑梭哈

返回目录

  • 解题代码
var isPowerOfTwo = function(n) {
  return Number.isInteger(Math.log2(n));
};
  • 执行测试

  • n16

  • returntrue

  • LeetCode Submit

✔ Accepted
  ✔ 1108/1108 cases passed (96 ms)
  ✔ Your runtime beats 91.7 % of javascript submissions
  ✔ Your memory usage beats 12.28 % of javascript submissions (35.7 MB)
  • 知识点

  • Number:将其他值转成数字值。Number 详细介绍

  • Math:JS 中的内置对象,具有数学常数和函数的属性和方法。Math 详细介绍

  • 解题思路

通过 Number 来判断进行求底运算后的数字,是否为整数,如果是,则 n 是 2 的幂,如果不是,则返回 false

jsliang 更加无力吐槽了

  • 进一步拓展

这道题还可以通过二进制进行位运算,不过 jsliang 兴致缺缺,小伙伴们可以进行尝试~


不折腾的前端,和咸鱼有什么区别!

图

jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。

扫描上方二维码,关注 jsliang 的公众号,让我们一起折腾!

知识共享许可协议
jsliang 的文档库梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。

Copyright © jsliang.top 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-07-15 19:14:46

results matching ""

    No results matching ""