题目描述
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:
1 是丑数。
n 不超过1690。
解题思路
动态规划,最新的数字一定是2,3,5的倍数,创建一个数组,里面是之前找到的丑数,只要在他们的基础上,是他们的2,3,5的倍数,一定是符合条件的
时间复杂度O(n)
空间复杂度O(n)
提交结果
package main
import (
"fmt"
)
func main() {
fmt.Println(nthUglyNumber(11))
}
func nthUglyNumber(n int) int {
a := []int{1}
x2, x3, x5 := 0, 0, 0
for i := 1; i < n; i++ {
a = append(a, min(2*a[x2], 3*a[x3], 5*a[x5]))
if a[len(a)-1] == int(2*a[x2]) {
x2++
}
if a[len(a)-1] == int(3*a[x3]) {
x3++
}
if a[len(a)-1] == int(5*a[x5]) {
x5++
}
}
return a[n-1]
}
func min(a, b, c int) int {
if a < b {
if a < c {
return a
} else {
return c
}
} else {
if b < c {
return b
} else {
return c
}
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/chou-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。