[动态规划] leetcode 264 Ugly Number II

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];
    }
};

猜你喜欢

转载自www.cnblogs.com/fish1996/p/11331321.html