Leetcode題解系列——264. Ugly Number II(c++版)
阿新 • • 發佈:2018-12-16
題目連結:264. Ugly Number II
題目大意:輸出第n個順序的醜數,醜數的定義為一個數的質因子只能是2,3,5.
例子:
- 6是醜數,6 = 2 * 3
- 8是醜數,8 = 2 * 2 * 2
- 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();
}
};