动规
丑数
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;
}
}
