面试题 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 }