problem: https://leetcode.com/problems/ugly-number-ii
大的ugly number是由小的ugly number乘以系数2, 3, 5得到的,每次相乘后,取最小的作为下一个,然后把最小的值的当前指针向后挪一位。(用vector封装了一下速度更慢了,不用的话只要4ms)
class Solution { public: int nthUglyNumber(int n) { vector<int> dp(n + 1); dp[1] = 1; vector<int> idx {1, 1, 1}; vector<int> nums {2, 3, 5}; for(int i = 2;i <= n;i++) { vector<int> res(nums.size()); int min_num = INT_MAX; for(int j = 0;j < nums.size();j++) { res[j] = nums[j] * dp[idx[j]]; min_num = min(min_num, res[j]); } for(int j = 0;j < nums.size();j++) { if(res[j] == min_num) { idx[j]++; } } dp[i] = min_num; } return dp[n]; } };