面试题 17.09. 第 k 个数
面试题 17.09. 第 k 个数
有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。
示例 1:
输入: k = 5 输出: 9
典中典之动态规划
题目理解:找到一个只含3,5,7的素因子(质数因子)的排列中第k个数。即该排列(除去第一位)中的数只能由(3,5,7构成)
func getKthMagicNumber(k int) int {
dp := make([]int, k+1)
dp[1] = 1
p3, p5, p7 := 1, 1, 1
for i := 2; i <= k; i++ {
x2, x3, x5 := dp[p3]*3, dp[p5]*5, dp[p7]*7
dp[i] = min(min(x2, x3), x5)
if dp[i] == x2 {
p3++
}
if dp[i] == x3 {
p5++
}
if dp[i] == x5 {
p7++
}
}
return dp[k]
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
浙公网安备 33010602011771号