/**
* k[0] = 1
* k[1] = min(k[0]*2, k[0]*3, k[0]*5) = 2
* k[2] = min(k[1]*2, k[0]*3, k[0]*5) = 3
* k[3] = min(k[1]*2, k[1]*3, k[0]*5) = 5
* k[4] = min(k[1]*2, k[1]*3, k[1]*5) = 4
* ...
*/
public class Solution {
public int nthUglyNumber(int n) {
if (n == 1) return 1;
// set three pointers point 2,3,5 respectively
int p2=0, p3=0, p5=0;
int[] k = new int[n];
k[0] = 1;
for (int i=1; i<n; i++) {
k[i] = Math.min(Math.min(k[p2]*2, k[p3]*3), k[p5]*5);
if (k[i] == k[p2]*2) p2++;
if (k[i] == k[p3]*3) p3++;
if (k[i] == k[p5]*5) p5++;
}
return k[n-1];
}
}
Leetcode 264. Ugly Number II
最新推荐文章于 2024-06-04 11:57:06 发布