1. 程式人生 > >【LeetCode】264. 醜數 II

【LeetCode】264. 醜數 II

題目連結https://leetcode-cn.com/problems/ugly-number-ii/description/

題目描述

編寫一個程式,找出第 n 個醜數。

醜數就是隻包含質因數 2, 3, 5 的正整數。

示例

輸入: n = 10
輸出: 12
解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個醜數。

說明

  1. 1 是醜數。
  2. n 不超過1690。

解決方法

解題思路:首先定義一個數組存放醜數,認為1是醜數,則初始化陣列ugly[0] = 1,然後從2,3,5這三個種子中挑選,選擇ugly[0]*2,ugly[0]*3,ugly[0]*5中最小的數為新的醜數

,顯然應該選擇2,即ugly[1] = 2,然後在從2,3,5中選擇,這時應該是從ugly[1]*2,ugly[0]*3,ugly[0]*5中進行選擇,顯然選擇3,即ugly[2] = 3,然後再從ugly[1]*2,ugly[1]*3,ugly[0]*5中選擇最小的,選擇2,即ugly[3] = 4,依次進行如下操作,得到最終的結果

class Solution {
public:
    int nthUglyNumber(int n) {
        vector<int> ugly(n);
        ugly[0]=1;
        int num2=0,num3=
0,num5=0; for (int i=1;i<n;i++){ ugly[i]=min(min(ugly[num2]*2,ugly[num3]*3),ugly[num5]*5); if (ugly[num2]*2==ugly[i]) num2++; if (ugly[num3]*3==ugly[i]) num3++; if (ugly[num5]*5==ugly[i]) num5++; } return ugly[n-1]; } };