本题也是不难,就是有点巧,我用heap的方法做了出来,但是本题的最优解肯定是dynamic programming,所以又重新解了一遍。本题不准备过多描述,解释其实不好解释,代码是一看就懂。需要注意:
- 同时使用4个index:2,3,5,和综合的。显而易见,5的增常最慢
对于同一个global index,即同一个number,可能有
和
两种可能,所以,2和5的index需要同时增加
时间复杂度:
- 空间复杂度:
代码如下:
class Solution {public int nthUglyNumber(int n) {int index2 = 0;int index3 = 0;int index5 = 0;int[] dp = new int[n];dp[0] = 1;for (int idx = 1; idx < n; ++idx) {int num2 = 2 * dp[index2];int num3 = 3 * dp[index3];int num5 = 5 * dp[index5];int minVal = Math.min(num2, Math.min(num3, num5));if (minVal == num2) {dp[idx] = num2;++index2;}if (minVal == num3) {dp[idx] = num3;++index3;}if (minVal == num5) {dp[idx] = num5;++index5;}}return dp[n-1];}}
