JZ33 丑数

 丑数

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

方法1:最小堆,基于sort.IntSlice实现heap

方法2:动态规划

 

func GetUglyNumber_Solution( index int ) int {
    // write code here
    if index == 0 {
        return 0
    }

    p2, p3, p5 := 0, 0, 0
    res := make([]int, index)
    res[0] = 1

    for i := 1; i < index; i++ {
        next := min(res[p2] * 2, res[p3] * 3, res[p5] * 5)
        if next == res[p2] * 2 {
            p2++
        }

        if next == res[p3] * 3 {
            p3++
        }

        if next == res[p5] * 5 {
            p5++
        }

        res[i] = next
    }

    return res[index - 1]
}

func min(a, b, c int) int {
    if a <= b && a <= c {
        return a
    } else if b <= a && b <= c {
        return b
    }

    return c
}

  

posted @ 2021-04-10 12:11  zqlucky  阅读(77)  评论(0编辑  收藏  举报