难度:中等
题目:
有些数的素因子只有 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];
}
}
运行结果:
如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。
系列持续更新中,点个订阅吧