Leetcode 每日一题 2022.09.28 面试题 17.09. 第 k 个数

面试题 17.09. 第 k 个数

在这里插入图片描述

本题题意很简单,就是将可以表示为 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];
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值