第K个数 牛客网 程序员面试金典 C++ Python

147 篇文章 0 订阅
146 篇文章 0 订阅

第K个数 牛客网 程序员面试金典 C++ Python

  • 题目描述

  • 有一些数的素因子只有3、5、7,请设计一个算法,找出其中的第k个数。

  • 给定一个数int k,请返回第k个数。保证k小于等于100。

  • 测试样例:

  • 3

  • 返回:7

C++

class KthNumber {
public:
    //run:3ms memory:504k
    int findKth(int k){
        vector<int> res(k+1,0);
        res[0] = 1;
        int t3 = 0;
        int t5 = 0;
        int t7 = 0;
        for(int i = 1; i <= k; i++){
            res[i] = min(res[t3] * 3, min(res[t5] * 5,res[t7]*7));
            if(res[i] == res[t3] * 3) t3++;
            if(res[i] == res[t5] * 5) t5++;
            if(res[i] == res[t7] * 7) t7++;
        }
        return res[k];
    }
};

Python

class KthNumber:
    def findKth(self, k):
        ret = []
        ret.append(1)
        t3 = 0
        t5 = 0
        t7 = 0
        for i in range(1,k+1):
            v = min(ret[t3]*3,min(ret[t5]*5,ret[t7]*7))
            ret.append(v)
            if ret[i] == ret[t3]*3: t3 += 1
            if ret[i] == ret[t5]*5: t5 += 1
            if ret[i] == ret[t7]*7: t7 += 1
        return ret[k]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值