剑指offer---ugly number

来源:互联网 发布:五毛特效是什么软件 编辑:程序博客网 时间:2024/06/09 00:27

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

解题思路:使用heap的方式进行排序处理,然后分别从其中向外取出数据。

java

import java.util.HashSet;import java.util.PriorityQueue;import java.util.Queue;import java.util.Set;public class Solution {    public int GetUglyNumber_Solution(int index) {if (index <= 0) {            return 0;        }        if (index == 1) {            return 1;        }        Set<Long> set = new HashSet<>();        Queue<Long> pq = new PriorityQueue<>();        set.add((long)1);        pq.offer((long)1);        int count = 0;        long val = 0;        int[] arr = new int[] {2, 3, 5};        while (count < index) {            val = pq.poll();            set.remove(val);            count++;            for (int i = 0; i < 3; i++) {                if (set.contains(val * arr[i])) {                    continue;                } else {                    pq.offer(val * arr[i]);                    set.add(val * arr[i]);                }            }        }        return (int)val;    }}