面试题:寻找第N个丑数

难度:中等

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

求按从小到大的顺序的第N个丑数。

 

参考答案:

public class Solution {
    public int nthUglyNumber(int n) {
        int[] ugly = new int[n];
        ugly[0] = 1;
        int i2 = 0, i3 = 0, i5 = 0;

        for(int i = 1; i < n; i++) {
            int next2 = ugly[i2]*2, next3 = ugly[i3]*3, next5 = ugly[i5]*5;
            int min = Math.min(next2, Math.min(next3, next5));
            ugly[i] = min;
            if(min == next2) i2++;
            if(min == next3) i3++;
            if(min == next5) i5++;
        }

        return ugly[n-1];
    }
}

 

posted @ 2015-08-27 02:21  -小城-  阅读(540)  评论(0编辑  收藏  举报