import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param index int整型
* @return int整型
*/
public int GetUglyNumber_Solution (int index) {
// write code here
if(index == 0){
return 0;
}
int[] factors = {2,3,5};
HashMap<Long, Integer> mp = new HashMap<>();
// 使用小顶堆记录即将从小到大访问的丑数,保证排序
PriorityQueue<Long> pq = new PriorityQueue<>();
mp.put(1L,1);
pq.offer(1L);
long res = 0;
for(int i = 0; i < index; i++){
// 从小顶堆弹出最小的元素
res = pq.poll();
// 每一个丑数都是上一个丑数,*2、*3、*5得来的
for(int j = 0; j < 3; j++){
// 乘上因数
long next = (long) res * factors[j];
// 去重
if(!mp.containsKey(next)){
mp.put(next,1);
pq.offer(next);
}
}
}
return (int) res;
}
}