Live2D

丑数



public class 丑数 {
    public static void main(String[] args) {
        int result;
        result = new 丑数().GetUglyNumber_Solution(7);
        System.out.println(result);
    }

    public int GetUglyNumber_Solution(int index) {
        //获得第index个丑数
        //把只包含质因子2、3和5的数称作丑数(Ugly Number)。
        if(index <= 0 ){
            return 0;
        }
        //1是第一个丑数 根据丑数的性质 每个丑数分别乘2 乘3 乘5 所得仍是丑数
        //维护三个下标  分别用于乘2 3 5 每次选择最小的加入丑数集合 被选择的下标加1
        int p2 = 0;
        int p3 = 0;
        int p5 = 0;
        int[] uglyNum = new int[index];
        uglyNum[0] = 1;//第一个丑数是1
        for (int i = 1; i < index; i++) {
            //每次放入最小的丑数
            uglyNum[i] = Math.min(uglyNum[p2]*2,Math.min(uglyNum[p3]*3,uglyNum[p5]*5));
            //下标右移
            if (uglyNum[i] == uglyNum[p2]*2) p2++;
            if (uglyNum[i] == uglyNum[p3]*3) p3++;
            if (uglyNum[i] == uglyNum[p5]*5) p5++;
        }
        return uglyNum[index-1];
    }
}
posted @ 2021-02-10 17:10  细雪之舞0213  阅读(53)  评论(0)    收藏  举报