丑数
丑数
问题陈述
我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:
1 | 输入: n = 10 |
说明:
- 1是丑数。
- n不超过1690。
思路分析
丑数的递推性质: 丑数只包含因子 2, 3, 52,3,5 ,因此有 “丑数 == 某较小丑数 × 某因子” (例如:10=5×2)。
动态规划解析:
状态定义:设动态规划列表dp,dp[i]代表第i+1个丑数。
转移方程:
1.当索引a,b,c满足以下条件时,dp[i]为三种情况的最小值。
2.每轮计算dp[i]后,需要更新索引a,b,c的值,使其始终满足方程条件。即分别判断dp[i]和dp[a]×2,dp[b]×3,dp[c]×5的大小关系,若相等则对应索引a,b,c加1。
dp[i]=min(dp[a]×2,dp[b]×3,dp[c]×5)
初始状态:
dp[0]=1,由题意第一个丑数为1。
返回值:
dp[n-1]。即返回第n个丑数。
代码实现
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 淋竹调!
评论