1.简述:

描述

把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第 n个丑数。

数据范围:

要求:空间复杂度  , 时间复杂度 

示例1

输入:

7

返回值:

8

2.代码实现:

import java.util.*;
public class Solution {
public int GetUglyNumber_Solution(int index) {
//排除0
if(index == 0)
return 0;
//要乘的因数
int[] factors = {2, 3, 5};
//去重
HashMap<Long, Integer> mp = new HashMap<>();
//小顶堆
PriorityQueue<Long> pq = new PriorityQueue<>();
//1先进去
mp.put(1L, 1);
pq.offer(1L);
long res = 0;
for(int i = 0; i < index; i++){
//每次取最小的
res = pq.poll();
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;
}
}