每日一题- day4

每日一题- day4

新手入坑LeetCode,每天打卡一道题
算法不一定很好,只是我自己的一个水平体现,做个自己刷题的记录,欢迎交流学习
(尽量AC LeetCode官方的每日一题)
欢迎交流学习!

题目:面试题 17.09. 第 k 个数

有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。

思路:

定义三个指针:一个是3的基数,一个5的,一个7的.将其倍数按照最小值先进的顺序存入,然后找指定位置的值
注意: 要去重.比如15,21等等…

代码:

class Solution {
public:
    int getKthMagicNumber(int k) {
        vector<int> ans(k);
        ans[0] = 1;//统一的
        int p1 = 0;
        int p2 = 0;
        int p3 = 0;
        for(int i = 1; i < k ; i ++){
            int num1 = ans[p1] * 3;
            int num2 = ans[p2] * 5;
            int num3 = ans[p3] * 7;
            ans[i] = min(min(num1,num2),num3);
            if(num1 == ans[i]){
                p1 ++;
            }else if(num2 == ans[i]){
                p2 ++;
            }else{
                p3 ++;
            }
            if(ans[i] == ans[i - 1]) i --;
        }
        return ans[k - 1];
    }
};

猜你喜欢

转载自blog.csdn.net/Nmj_World/article/details/127095158