本题题意很简单,就是将可以表示为 3a5b7*c的数进行排列,求出第k个数。注意这里的abc可以为0,意义是不含5的因子。
观察所给出的数列,一个数是前面的数*3 或 *5 或 *7 得到的,所以可以考虑使用动态规划。创建数组
dp,dp[k]为第k个数。
创建三个指针index3 index5 index7,分别表示下一个数是dp[index3]*3…… 将三个可能值的最小添加到数组即可。
class Solution {
public:
int getKthMagicNumber(int k) {
vector<int>dp(k+1);
dp[0]=1;
int index3=0,index5=0,index7=0;
for(int i=1;i<k;i++)
{
int num3=dp[index3]*3;
int num5=dp[index5]*5;
int num7=dp[index7]*7;
dp[i]=min(num3,min(num5,num7));
if(dp[i]==num3)
index3++;
if(dp[i]==num5)
index5++;
if(dp[i]==num7)
index7++;
}
return dp[k-1];
}
};