[路飞][LeetCode]264_丑数 II

158 阅读1分钟

看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~

谁能九层台,不用累土起!

题目地址

题目

给你一个整数 n ,请你找出并返回第 n 个 丑数 。

丑数 就是只包含质因数 23 和/或 5 的正整数。

示例 1:

输入: n = 10
输出: 12
解释: [1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。

示例 2:

输入: n = 1
输出: 1
解释: 1 通常被视为丑数。

提示:

  • 1 <= n <= 1690

解题思路

  • 1开始,由于1是特殊的丑数
  • 因为丑数是只包含235为因数,因此后续的丑数必然是由前面的丑数*2/3/5得到
  • 我们维护三个指针分别计数,如果指针位置的丑数*指针的值等于当前的丑数,该指针加一

解题代码

var nthUglyNumber = function(n) {
    let a=0,b=0,c=0
    let ret= [1]
    for(let i=0;i<n;i++){
        const n2 =ret[a]*2
        const n3 =ret[b]*3
        const n5 =ret[c]*5
        const min = Math.min(n2,n3,n5)
        ret.push(min)
        if(min==n2) a++
        if(min==n3) b++
        if(min==n5) c++

    }
    return ret[n-1]
};

如有任何问题或建议,欢迎留言讨论!