后面的数可以由前面的数生成

丑数

http://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b

后面的数可以由前的数生成,下一个数应该是最接近前一个数的,所以,下一个数=min(x3,x5,x*2)

图片说明

    /***
     * 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。
     * 习惯上我们把1当做是第一个丑数。
     * 求按从小到大的顺序的第N个丑数。
     * @param index N
     * @return 第N个丑数
     */
    public int GetUglyNumber_Solution(int index) {
        if(index<=0){
            return 0;
        }
        int a=1,b=1,c=1;
        int[] dp=new int[index+1];
        dp[1]=1;
        for(int i=2;i<=index;i++){
            int n2=dp[a]*2,n3=dp[b]*3,n5=dp[c]*5;
            dp[i]=Math.min(n2,Math.min(n3,n5));
            if(dp[i]==n2){
                a++;
            }
            if(dp[i]==n3){
                b++;
            }
            if(dp[i]==n5){
                c++;
            }
        }
        return dp[index];
    }
全部评论

相关推荐

狠赚笔第一人:学计算机自己不努力怪大环境?我大一就拿到了美团大厂的offer,好好看看自己有没有努力查看图片
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务