码迷,mamicode.com
首页 > 其他好文 > 详细

[Leetcode] 丑数问题

时间:2015-09-03 21:35:44      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

Ugly Number

Write a program to check whether a given number is an ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 6, 8 are ugly while 14 is not ugly since it includes another prime factor 7.

Note that 1 is typically treated as an ugly number.

Ugly Number II

Write a program to find the n-th ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first 10 ugly numbers.

Note that 1 is typically treated as an ugly number.

又是一个找第K小的问题,老题重谈了。

一般思路都是从当前最小,找出后面的数字,并且放到优先队列当中去进行保存。

一、ugly number

 1 public class Solution {
 2     public boolean isUgly(int num) {
 3         if(num<=0) return false;
 4         if(num==1) return true;
 5         while(num!=1){
 6             if(num%2==0) num/=2;
 7             else if(num%3==0) num/=3;
 8             else if(num%5==0) num/=5;
 9             else return false;
10         }
11         return true;
12     }
13 }

二、ugly number II

 1 import java.util.*;
 2 
 3 public class Solution {
 4     public int nthUglyNumber(int n) {
 5         if(n==1) return 1;
 6         //这里需要使用Double来保存数据,使用int会溢出
 7         PriorityQueue<Double> q2 = new PriorityQueue<Double>();
 8         PriorityQueue<Double> q3 = new PriorityQueue<Double>();
 9         PriorityQueue<Double> q5 = new PriorityQueue<Double>();
10         q2.offer(1.0);
11         double min =1;
12         for(int i=1;i<=n;i++){
13             min = q2.peek().intValue();
14             min = !q3.isEmpty()&&q3.peek().intValue()<min? q3.peek().intValue():min;
15             min = !q5.isEmpty()&&q5.peek().intValue()<min? q5.peek().intValue():min;
16             if(min==q2.peek().intValue()){
17                 q2.poll();
18                 q2.offer(2*min);
19                 q3.offer(3*min);
20                 q5.offer(5*min);
21             }else if(min==q3.peek().intValue()){
22                 q3.poll();
23                 q3.offer(3*min);
24                 q5.offer(5*min);
25             }else{
26                 q5.poll();
27                 q5.offer(min*5);
28             }
29         }
30         return (int)min;
31     }
32 }

 

[Leetcode] 丑数问题

标签:

原文地址:http://www.cnblogs.com/deepblueme/p/4780671.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!