丑数

面试题丑数
丑数定义:所有因子中只包含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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值