动规
丑数
https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b?tpId=13&&tqId=11186&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
1、求第n个丑数
a0,a1,a2....an-1
a[t2]、a[t3]、a[t5]分别记录了计算下一个丑数时,可以乘2、乘3或乘5的最小丑数
a[i]指第i+1个丑数=min{a[t2]2,a[t3]3,a[t5]*5}
public class Solution { public int GetUglyNumber_Solution(int index) { //动态规划,t2、t3、t5分别记录了计算下一个丑数时,可以乘2、乘3或乘5的最小丑数。 if(index<=0) return 0; int[] a=new int[index];a[0]=1; int t2=0,t3=0,t5=0; for(int i=1;i<index;i++){ a[i]=min(a[t2]*2,a[t3]*3,a[t5]*5); t2+=(a[t2]*2==a[i])?1:0; t3+=(a[t3]*3==a[i])?1:0; t5+=(a[t5]*5==a[i])?1:0; } return a[index-1]; } public int min(int x,int y,int z){ int min=(x<y)?x:y; min=(min<z)?min:z; return min; } }