每日一题- 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];
}
};