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
}

浙公网安备 33010602011771号