剑指offer 丑数

痞子三分冷 提交于 2020-02-06 03:42:18

题目描述

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

题目分析

这个题目其实是素数筛的变种问题,只要按顺序拿出所有的丑数就可以了。

java代码

public int GetUglyNumber_Solution(int index) {
        if(index<=0){
            return 0;
        }
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        int N = 10000;
        int i2 = 0;
        int i3 = 0;
        int i5 = 0;

        int temp = 0;
        for(int i=0;i<N;i++){
            int x2 = arrayList.get(i2);
            int x3 = arrayList.get(i3);
            int x5 = arrayList.get(i5);
            temp = Math.min(x2*2,Math.min(x3*3,x5*5));
            if(temp == x2*2){
                i2++;
            }
            if(temp == x3*3){
                i3++;
            }
            if(temp == x5*5){
                i5++;
            }
            arrayList.add(temp);
        }
        return arrayList.get(index-1);
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!