LeetCode题解:剑指 Offer 49. 丑数,暴力法,JavaScript,详细注释

原题链接:剑指 Offer 49. 丑数

解题思路:

  1. 使用三个嵌套循环,计算出所有可能的丑数。
  2. 由于每层循环都是在上层循环的结果基础上进行计算,因此计算结果并未排序。
  3. 将所有丑数从小到大排序,再取出第n个即可。
/**
 * @param {number} n
 * @return {number}
 */
var nthUglyNumber = function (n) {
  let ugly = []; // 存储所有的丑数

  // 分别枚举所有质因数为2、3、5的数,将其存入数组
  // 0x7FFFFFFF即为最大的32位二进制数,即0b1111111111111111111111111111111
  // 对应的是10进制数2147483647,计算出的丑数长度为1691
  for (let i = 1; i <= 0x7fffffff; i *= 2) {
    for (let j = i; j <= 0x7fffffff; j *= 3) {
      for (let k = j; k <= 0x7fffffff; k *= 5) {
        ugly.push(k);
      }
    }
  }

  // 由于每层循环都是在上层循环的结果基础上进行计算,例如在i和j都等于1的情况下,先计算了所有k*=5的结果
  // 用此方法计算出的丑数并不是按大小排序,因此只能将所有丑数计算出来,再进行排序取需要的值
  ugly.sort((a, b) => a - b);

  // 取出第n个丑数
  return ugly[n - 1];
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值