题目描述
有一些数的素因子只有3、5、7,请设计一个算法,找出其中的第k个数。
给定一个数int k,请返回第k个数。保证k小于等于100。
测试样例:
算法:
使用3个队列分别保存着3的倍数,5的倍数,7的倍数。每次循环找到当前队头即最小值,这个值就是第n个所求数。
这个值出自哪个队列x,说明现在3个队列内的所有数的最小数是x的倍数,那么需要将所有队头继续扩大x倍,因为x倍的数最小了
key:3可以乘3,5,7队列,5可以乘5,7队列,7可以乘7队列。因为3乘了5,5就不需要乘3了
class KthNumber {
public:
int findKth(int k) {
// write code here
queue<int> que3;
queue<int> que5;
queue<int> que7;
//init
que3.push(3);
que5.push(5);
que7.push(7);
//begin
int count = 0;
int key = 0;
while (count < k){
int key3,key5,key7;
if(!que3.empty()){
key3 = que3.front();
}
else
key3 = INT_MAX;
if(!que5.empty()){
key5 = que5.front();
}
else
key5 = INT_MAX;
if(!que7.empty()){
key7 = que7.front();
}
else
key7 = INT_MAX;
key = min(min(key3,key5),key7);
if(key == key3){
que3.push(key * 3);
que5.push(key * 5);
que7.push(key * 7);
que3.pop();
}
else if(key == key5){
que5.push(key * 5);
que7.push(key * 7);
que5.pop();
}
else{
que7.push(key * 7);
que7.pop();
}
count++;
}
return key;
}
};