题意理解
找出所有只有包含2,3,5因子的数,排序得到第n个数。
问题分析
思路奇特
用最小堆,用最小数乘2,3,5,放入堆,有重复,剔除重复数,每次把最小数删除,最小数一定是最小的。但是堆里其他数不一定是最小的。
其他
学习
力扣https://leetcode-cn.com/problems/chou-shu-lcof/solution/chou-shu-by-leetcode-solution-0e5i/
链接
class Solution {
public:
int nthUglyNumber(int n) {
if (n == 1) return 1;
priority_queue<long, vector<long>, greater<long>> my_que;
unordered_set<long> my_set;
my_que.push(1);
my_set.insert(1);
for(int i = 2; i <= n; i++) {
//取最小值
long val = my_que.top();
//cout << "i order " << i << '\t' << order << endl;
//if (i == n) return val;
//cout << i << '\t' << n << endl;
//删最小值
my_que.pop();
//插入三个值,如果重复,不插入,每插入就要order增1,到了n就break
long val1 = val * 2;
if (!my_set.count(val1)) {
my_que.push(val1);
my_set.insert(val1);
}
long val2 = val * 3;
if (!my_set.count(val2)) {
my_que.push(val2);
my_set.insert(val2);
}
long val3 = val * 5;
if (!my_set.count(val3)) {
my_set.insert(val3);
my_que.push(val3);
}
//cout << "val val1 val2 val3 " << val << '\t' << val1 << '\t' << val2 << '\t' << val3 << endl;
}
return my_que.top();
}
};