题意:给一个整数n,求出第n个丑数,丑数即为只包含质因数2,3,5的数
思路:把质因数分别为2,3,5的丑数看成3个子数组,把整个dp数组看成3个子数组的组合,取每个子数组的索引L1,L2,L3,则第k个丑数即为min(dp[L1]*2,dp[L2]*3,dp[L3]*5),若当前丑数大于某个子数组索引上的值则更新索引值,如此可求出所有n个丑数
class Solution {
public int nthUglyNumber(int n) {
int[] dp = new int[n+1];
dp[0] = 1;
int l1 = 0, l2 = 0, l3 = 0;
for (int i = 1; i <= n; i++) {
dp[i] = Math.min(dp[l1]*2, Math.min(dp[l2]*3, dp[l3]*5));
if (dp[i] >= dp[l1]*2)
l1++;
if (dp[i] >= dp[l2]*3)
l2++;
if (dp[i] >= dp[l3]*5)
l3++;
}
return dp[n-1];
}
}