1. 程式人生 > >Leetcode題解系列——264. Ugly Number II(c++版)

Leetcode題解系列——264. Ugly Number II(c++版)

題目連結:264. Ugly Number II

題目大意:輸出第n個順序的醜數,醜數的定義為一個數的質因子只能是2,3,5.

例子:

  1. 6是醜數,6 = 2 * 3
  2. 8是醜數,8 = 2 * 2 * 2
  3. 14不是醜數, 14 = 7 * 2. 包含了7

一.演算法設計

由於判斷一個數的時間複雜度並不高,但是判斷一系列的數,那麼這樣的時間消耗是不行的。所以我們只需要判斷一些醜數的順序,這裡利用到醜數的一個性質:醜數的2,3,5倍數也一定是醜數

所以,我們這裡只需要對於一個數的2,3,5倍數來進行排序,每次選擇其中最小的值放入陣列中,直到放入到第n個數,最後的元素即是我們需要的第N個醜數。

轉移方程: val = min(v[unum2]*2,min(v[unum3]*3,v[unum5]*5))

二.演算法實現

class Solution {
public:
    int nthUglyNumber(int n) {
        vector<int> v{1};
        int unum2 = 0, unum3 = 0, unum5 = 0;
        while(--n > 0){
            int val = min(v[unum2]*2,min(v[unum3]*3,v[unum5]*5));
            v.
push_back(val); // 判斷排序,去除重複的 while(v[unum2]*2 <= val) unum2++; while(v[unum3]*3 <= val) unum3++; while(v[unum5]*5 <= val) unum5++; } return v.back(); } };