#leetcode#Ugly Numbers 2
阿新 • • 發佈:2018-12-27
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, and n
=====================================================
演算法參考了, 核心思想就是所有的ugly number都可以通過 這個 ugly number 序列本身通過乘以2,3 或者 5 來得到,所有就有了 memorization 的過程,每一次選當前最小的放入 uglyNumber array當中
http://www.geeksforgeeks.org/ugly-numbers/
https://discuss.leetcode.com/topic/21791/o-n-java-solution
寫這個部落格是因為覺得自己的程式碼可讀性更好一些
public class Solution { public int nthUglyNumber(int n) { int[] uglyNumbers = new int[n]; int idx2 = 0, idx3 = 0, idx5 = 0; uglyNumbers[0] = 1; for(int i = 1; i < n; i++){ int cur2 = uglyNumbers[idx2] * 2; int cur3 = uglyNumbers[idx3] * 3; int cur5 = uglyNumbers[idx5] * 5; int cur = Math.min(Math.min(cur2, cur3), cur5); // can't use if else here because sometimes cur2 == cur3 or vise versa, for example, when idx2 == 2, idx3 == 1, then uglyNumbers[idx2] * 2 == 3 * 2 == 6, uglyNumbers[idx3] * 3 == 2 * 3 == 6, in this case, both idx2 and idx3 should move forward, otherwise, there will be duplicate 6 in the uglyNumber array if(cur == cur2) idx2++; if(cur == cur3) idx3++; if(cur == cur5) idx5++; uglyNumbers[i] = cur; } return uglyNumbers[n - 1]; } }