class Solution {
public int nthUglyNumber(int n) {
int ans[]=new int[n],count=1,index2=0,index3=0,index5=0;
ans[0]=1;
while(count<n) {
ans[count]=Math.min(2*ans[index2],Math.min(3*ans[index3],5*ans[index5]));
if(ans[count]==2*ans[index2])
index2++;
if(ans[count]==3*ans[index3])
index3++;
if(ans[count]==5*ans[index5])
index5++;
count++;
}
return ans[n-1];
}
}
/*
@yayawxw
@DP
一个十分巧妙的动态规划问题
1.我们将前面求得的丑数记录下来,后面的丑数就是前面的丑数*2,*3,*5
2.但是问题来了,我怎么确定已知前面k-1个丑数,我怎么确定第k个丑数呢
3.采取用三个指针的方法,index2,index3,index5
4.index2指向的数字下一次永远*2,index3指向的数字下一次永远*3,index5指向的数字永远*5
5.我们从2*index2 3*index3 5*index5选取最小的一个数字,作为第k个丑数
6.如果第K个丑数==2*index2,也就是说前面0-index2个丑数*2不可能产生比第K个丑数更大的丑数了,所以index2++
7.index3,index5同理
8.返回第n个丑数
*/
动态规划丑数二
最新推荐文章于 2022-09-28 11:05:14 发布
本文介绍了一个巧妙的动态规划问题——求第N个丑数的算法。通过记录已知丑数并使用三个指针分别乘以2、3、5来生成新的丑数,确保每次选择最小的丑数作为下一个丑数。该算法详细解释了如何更新指针以避免重复计算。
摘要由CSDN通过智能技术生成