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 }