题号:no92
题目名:第 k 个数
原题URL:https://leetcode-cn.com/problems/get-kth-magic-number-lcci/
题目描述
有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。
示例 1:
输入: k = 1
输出: 1
示例 2:
输入: k = 5
输出: 9
思路
- 按照题意要求,可以将因子拆成1,3,5,7,3 * 3,3 * 5,3 * 7,3 * 3 * 3,3 * 3 * 5
- 设置三个因子指针指向1
- 每次返回因子得出的最小数,用到哪个因子,哪个因子的指针就后移
解题代码
public class Solution {
public int getKthMagicNumber(int k) {
//前面的数的规律是1,3,5,7,3*3,3*5,3*7,3*3*3,3*3*5...
//除了第一个数是1,其他的规律都是讲因子得到的数从小到大排过来
int[] dp = new int[k];
//第一个是1
dp[0]=1;
//设置3,5,7因子的指针
int l3 = 0;
int l5 = 0;
int l7 = 0;
for (int i = 1; i < dp.length; i++) {
//因子最小的一个乘积
dp[i] = Math.min(Math.min(dp[l3]*3,dp[l5]*5),dp[l7]*7);
//如果找到,那就指针后移
if(dp[i]==dp[l3]*3) l3++;
if(dp[i]==dp[l5]*5) l5++;
if(dp[i]==dp[l7]*7) l7++;
}
return dp[k-1];
}
}