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

 

 

posted on 2022-09-28 09:41  HHHuskie  阅读(27)  评论(0编辑  收藏  举报

导航