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个丑数
*/
动态规划丑数二
猜你喜欢
转载自blog.csdn.net/cobracanary/article/details/88570616
今日推荐
周排行