看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~
谁能九层台,不用累土起!
题目
给你一个整数 n ,请你找出并返回第 n 个 丑数 。
丑数 就是只包含质因数 2、3 和/或 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是特殊的丑数 - 因为丑数是只包含
2、3、5为因数,因此后续的丑数必然是由前面的丑数*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]
};
如有任何问题或建议,欢迎留言讨论!