标签:
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.
Hint:
isUgly
for every number until you reach the nth one. Most numbers are not ugly. Try to focus your effort on generating only the ugly ones.根据hint,我们维护三个队列。分别用来存当前的ugly number与2,3,5相乘后的结果。
选三个队列的队头元素最小的那个即是下一个ugly number。
1 public class Solution { 2 public int nthUglyNumber(int n) { 3 if (n < 2) { 4 return 1; 5 } 6 Queue<Integer> twoNumbers = new LinkedList<Integer>(); 7 Queue<Integer> threeNumbers = new LinkedList<Integer>(); 8 Queue<Integer> fiveNumbers = new LinkedList<Integer>(); 9 twoNumbers.offer(2); 10 threeNumbers.offer(3); 11 fiveNumbers.offer(5); 12 int result = 1; 13 while (n > 1) { 14 int candidate1 = twoNumbers.peek(), candidate2 = threeNumbers.peek(), candidate3 = fiveNumbers.peek(); 15 // find minimum number 16 result = Math.min(candidate1, candidate2); 17 result = Math.min(candidate3, result); 18 // add new numbers 19 twoNumbers.offer(result * 2); 20 threeNumbers.offer(result * 3); 21 fiveNumbers.offer(result * 5); 22 // remove existing minimums 23 if (result == candidate1) { 24 twoNumbers.poll(); 25 } 26 if (result == candidate2) { 27 threeNumbers.poll(); 28 } 29 if (result == candidate3) { 30 fiveNumbers.poll(); 31 } 32 n--; 33 } 34 return result; 35 } 36 }
标签:
原文地址:http://www.cnblogs.com/ireneyanglan/p/4948907.html