动规

丑数

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;
    }
}
全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务