丑数

本文介绍了一种求解第N个丑数的有效算法。丑数定义为仅包含质因数2、3、5的正整数。通过动态规划方法,实现了一个Java程序来找出按升序排列的第N个丑数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试题丑数
丑数定义:所有因子中只包含2,3,5的数就称之为丑数。例如 6,8都是丑数,但是14就不是丑数了。因为14的因子里面有7。习惯上我们认为第一个丑数是1。求按照从小到大的顺序第N个丑数。
我们首先分析一下,因为丑数的因子里面只有2,3,5。所以一个丑数的组成必然是这样的,丑数 x = 2^a*3^b*5^c;
如果可以看明白这个等式的话,我们接下来的工作就简单了。首先,我们假设a,b,c都是0,然后按照大小的顺序来选择性对a,b,c增长就可以了。
代码如下:

public class UglyNumber {
    public static void main(String[] args) {
        System.out.println("GetUglyNumber_Solution(5) = " + GetUglyNumber_Solution(5));
    }

    public static int GetUglyNumber_Solution(int index) {
        if (index == 1) {
            return 1;
        }
        int index2 = 0;
        int index3 = 0;
        int index5 = 0;
        int[] num = new int[index];
        num[0] = 1;
        for (int i = 1; i < index; i++) {
            int uglyuNumber = Math.min(num[index2] * 2,
                    Math.min(num[index3] * 3, num[index5] * 5)
            );
            num[i] = uglyuNumber;
            if (uglyuNumber == num[index2] * 2) {
                index2++;
            }
            if (uglyuNumber == num[index3] * 3) {
                index3++;
            }
            if (uglyuNumber == num[index5] * 5) {
                index5++;
            }
        }
        return num[index - 1];
    }
}

最后是git地址:https://github.com/yunzhifei/mavenalgorithm.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值