剑指offer三十三之丑数

一、题目

  如果一个数的因子中,出去1和本身以外,质数因子只包含2、3和5,则把改数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质数因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

      注释: 8的因子有1,2,4,8,出去1和8以后,还有因子2,4。其中质数因子只有2,因此8是丑数

                 14的因子有1,2,7,14,出去1和14以后,还有因子2,7。其中质数因子有2,7,而7不是2,3,5这几个数,因此14不是丑数

二、思路

  动态规划,对于第i个数,它一定是之前已存在数的2倍,3倍或5倍

三、代码

import static java.lang.Math.min;

/**
 * 动态规划,对于第i个数,它一定是之前已存在数的2倍,3倍或5倍
 */
public class Solution {

    public int GetUglyNumber_Solution(int index) {

        if(index<=0){
            return 0;
        }

        int[] a=new int[index];

        a[0]=1;

        int index1=0;
        int index2=0;
        int index3=0;

        for(int i=1;i<index;i++){
            a[i]= min(a[index1]*2, min(a[index2]*3,a[index3]*5));
            if(a[i]==a[index1]*2){index1++;}
            if(a[i]==a[index2]*3){index2++;}
            if(a[i]==a[index3]*5){index3++;}
        }


        return a[index-1];
    }
}
View Code

---------------------------------------------

参考链接:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值