**[Lintcode]Ugly Number II 丑数 II

来源:互联网 发布:神经网络算法 编辑:程序博客网 时间:2024/06/05 05:09

Ugly number is a number that only have factors 23 and 5.

Design an algorithm to find the nth ugly number. The first 10 ugly numbers are 1, 2, 3, 4, 5, 6, 8, 9, 10, 12...

分析:

(1) 1×2, 2×2, 3×2, 4×2, 5×2, …

(2) 1×3, 2×3, 3×3, 4×3, 5×3, …

(3) 1×5, 2×5, 3×5, 4×5, 5×5, …

分成三组,每次取最小值做丑数,每组使用一个指针。然后被选中的数的指针后移。

class Solution {    /**     * @param n an integer     * @return the nth prime number as description.     */    public int nthUglyNumber(int n) {        int[] arr = new int[n];        arr[0] = 1;        int index = 1;        int a = 2, b = 3, c = 5;        int indexA = 1, indexB = 1, indexC = 1;        for(int i = 1; i < arr.length; i++) {            int min = Math.min(Math.min(a, b), c);            arr[i] = min;                        if(a == min) a = arr[indexA++] * 2;            if(b == min) b = arr[indexB++] * 3;            if(c == min) c = arr[indexC++] * 5;        }        return arr[arr.length - 1];    }};


0 0