剑指 Offer 49. 丑数
题目描述
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
-
说明:
1 是丑数。
n 不超过1690。
解法:动态规划
将前面求得的丑数记录下来,后面的丑数就是前面的丑数*2,*3,*5
- 采用a,b,c三个指针。 a指向的数字下一次永远2,b指向的数字下一次永远3,c指向的数字永远*5
- 第k个丑数为:2 * dp[a],3 * dp[b] , 5 * dp[c] 的最小值
- 更新a,b,c指针
- 如果第K个丑数 === 2 * dp[a],也就是说 2 * (dp[1] ~ dp[a]) 不可能产生比第K个丑数更大的丑数了,所以p2++
- p3,p5同理
- 返回第n个丑数
var nthUglyNumber =