LeetCode - 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 解法 - 无脑梭哈 |

二 前言

  • 难度:简单

  • 涉及知识:位运算、数学

  • 题目地址:https://leetcode-cn.com/problems/power-of-two/

  • 题目内容

给定一个整数,编写一个函数来判断它是否是 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;	
};
  • 执行测试

  1. n: 16

  2. return: true

  • 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));	
};
  • 执行测试

  1. n: 16

  2. return: true

  • 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)
  • 知识点

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

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

  • 解题思路

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

jsliang 更加无力吐槽了

  • 进一步拓展

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


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

640?wx_fmt=jpeg

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

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

640?wx_fmt=png

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值