丑数

本贴最后更新于 2500 天前,其中的信息可能已经时异事殊

题目描述

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

解题思路

  • list 内根据顺序保存已有的丑数;

  • 定义 2,3,5 的 index,比较与 index 上的数的乘积的大小:

  • 最小值加入 list 内,并且相应的 index++。

代码

import java.util.ArrayList;
public class Solution {
    public int GetUglyNumber_Solution(int index) {
        if (index <= 0)
            return 0;
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        int index2 = 0;
        int index3 = 0;
        int index5 = 0;
        for (int i = 1; i < index; i++) {
            int tmp2 = list.get(index2) * 2;
            int tmp3 = list.get(index3) * 3;
            int tmp5 = list.get(index5) * 5;
            int min = Math.min(tmp2, Math.min(tmp3, tmp5));
            list.add(min);
            if (tmp2 == min)
                index2++;
            if (tmp3 == min)
                index3++;
            if (tmp5 == min)
                index5++;
        }
        return list.get(index-1);
    }
}

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...