丑数

题目描述:
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
解体思路:
1.丑数定义:百度百科
2.所谓丑数,就是那些因子只含2,3,5的数。1,2,3,4,5,6,8,9,10,12,15是最前面的11个丑数。
4.对小于N的整数不断进行遍历。将其分为因子包含2.3.5的三类丑数。
5.对丑数排序,按由小到大的顺序排序。
实际操作:

    public int GetUglyNumber_Solution(int index) {
        //丑数定义:所谓丑数,就是那些因子只含2,3,5的数。1,2,3,4,5,6,8,9,10,12,15是最前面的11个丑数。
        //思路:丑数可以由另外一个丑数乘以2,3或者5得到
        //特殊情况
        if (index == 0) return 0;
        if (index <= 5) return index;
        int[] array=new int [index];
        //列出整数1~5,减少循环
        array[0]=1;
        array[1]=2;
        array[2]=3;
        array[3]=4;
        array[4]=5;
        int temp=0;
        int uglyNum2=0,uglyNum3=0,uglyNum5=0;
        //从丑数6开始遍历
        for (int i = 5; i < index; i++) {
            //包含因子2的丑数,且大于已知最大丑数
            for (int j = 0; j < i; j++) {
                temp=array[j]*2;
                if (temp>array[i-1]) {
                    uglyNum2=temp;
                    break;
                }
            }
            //包含因子3的丑数,且大于已知最大丑数
            for (int j = 0;j<i; j++) {
                temp=array[j]*3;
                if (temp>array[i-1]) {
                    uglyNum3=temp;
                    break;
                }
            }
            //包含因子5的丑数,且大于已知最大丑数
            for (int j = 0;j<i; j++) {
                temp=array[j]*5;
                if (temp>array[i-1]) {
                    uglyNum5=temp;
                    break;
                }
            }
            //对丑数进行排序
            int[] newArray={uglyNum2,uglyNum3,uglyNum5};
            Arrays.sort(newArray);
            //按从小到大的顺序给array[i]赋值
            array[i]=newArray[0];
        }
        //返回丑数值
        return array[index-1];
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值