自定义优先队列 比较器

import java.util.*;
public class Solution {
    public int GetUglyNumber_Solution(int index) {
//自定义优先队列 比较器
        PriorityQueue<int[]> que=new PriorityQueue<int[]>(
            new Comparator<int[]>() {
            public int compare(int[] o1, int[] o2) {                
                return o1[0]-o2[0];
            }
        });
//第一个代表数字 第二个代表该数字的最小质因子, 1作为初始化 需要执行2,3,5所以1的质因子需要比2,3,5都大。
//然后就是最小堆,每次选出最小的那个就是第n个丑数
//同时每次把该数字乘以2,3,5构造出的丑数放入最小堆
//原理就是 2*3 = 6 = 3*2 重复了 通过判断只能产生3*2 而 2的最小质因子为2 不能乘3 就避免了重复乘,
//只有质数能保证这样的性质
//如果不是质数 需要用set集合
        que.offer(new int[]{1,6});
        int[] nums = new int[2];
        for(int i=0;i<index;i++){
            nums = que.poll();
            que.offer(new int[]{nums[0]*2,2});
            if(nums[1]>2){
                que.offer(new int[]{nums[0]*3,3});
                if(nums[1]>3)
                    que.offer(new int[]{nums[0]*5,5});
            }
        }
        return nums[0];
    }

}