剑指 Offer 49. 丑数

115 阅读1分钟

剑指 Offer 49. 丑数

我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。 

var nthUglyNumber = function (n) {
    var nums = new Array(n).fill(0)
    nums[0] = 1
    var index2 = 0
    var index3 = 0
    var index5 = 0
    /**
        1, 2, 3, 4, 5, 6, 8, 9, 10, 12
        0 0 0
        1 0 0
        1 1 0
        2 1 0
        2 1 1
        3 2 1
     */
    for (var i = 1; i < n; i++) {
        nums[i] = Math.min(nums[index2] * 2, nums[index3] * 3, nums[index5] * 5)
        if (nums[i] == nums[index2] * 2) {
            index2++
        }
        if (nums[i] == nums[index3] * 3) {
            index3++
        }
        if (nums[i] == nums[index5] * 5) {
            index5++
        }
    }
    return nums[n - 1]
}