LeetCode面试题[17.09]第k个数

难度:中等

题目:

有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。 


示例 1:

输入: k = 5

输出: 9

Related Topics

  • 哈希表
  • 数学
  • 动态规划
  • 堆(优先队列)

 重点!!!解题思路

第一步:

我们用数组的方法来实现这些数的排列

由于我们这个数组每个数素因子只有3,5,7. 

那我们这个数组中的每个数肯定是由这三个数相乘得来得

第二步:

 前三个数分别是1*3,1*5,1*7,

 接下来是3*3,3*5,3*7

 第一次我们是在1*3,1*5,1*7中取一个最小值然后放入数组中,让取到的值数组下标加1

 此时数组【1,3】

 第二次比较是3*3,1*5,1*7中取最小值,也是让取到的值数组下标加1

 此时数组【1,3,5】

 

 如此循环

 第三步:

一直循环到k位置停止,这样我们每次得到的数就没有重复的数,都是一个新的数字

最后返回数组下标为k-1的位置,即为第k个数

源码:

class Solution {
    public int getKthMagicNumber(int k) {
        int p3=0,p5=0,p7=0; //p3 p5 p7初始化
        int[] dp=new int[k];  //定义数组长度是k
        dp[0]=1; //让数组第一个数为1
        for (int i=1;i<k;i++){  //从数组下标为1开始循环
            dp[i]=Math.min(dp[p3]*3,Math.min(dp[p5]*5,dp[p7]*7)); //3个数取最小值
            if (dp[i]%3==0) p3++;  //取到谁,谁下标加1
            if (dp[i]%5==0) p5++;
            if (dp[i]%7==0) p7++;
        }
        return dp[k-1];
    }
}

 运行结果:

如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。 

系列持续更新中,点个订阅吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月亮被咬碎成星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值