Skip to content

Commit a2d57eb

Browse files
committed
add 313. Super Ugly Number
1 parent 7043957 commit a2d57eb

File tree

3 files changed

+79
-0
lines changed

3 files changed

+79
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* @Author: [email protected]
3+
* @Last Modified time: 2016-07-10 10:55:05
4+
*/
5+
6+
class Solution {
7+
public:
8+
/* Just according to:
9+
* https://discuss.leetcode.com/topic/31012/7-line-consice-o-kn-c-solution
10+
*/
11+
int nthSuperUglyNumber(int n, vector<int>& primes) {
12+
vector<int> index(primes.size(), 0), ugly_numbers(n, INT_MAX);
13+
ugly_numbers[0] = 1;
14+
for(int i=1; i<n; i++){
15+
for(int j=0; j<primes.size();j++){
16+
ugly_numbers[i]=min(ugly_numbers[i], ugly_numbers[index[j]]*primes[j]);
17+
}
18+
for(int j=0; j<primes.size();j++){
19+
index[j] += (ugly_numbers[i]==ugly_numbers[index[j]]*primes[j]);
20+
}
21+
}
22+
return ugly_numbers[n-1];
23+
}
24+
};
25+
26+
/*
27+
2
28+
[2,3,5]
29+
100
30+
[2,3,5,7,11]
31+
5
32+
[2,3,5,7,11,13,17,19]
33+
*/
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#! /usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
# @Last Modified time: 2016-07-10 10:32:18
5+
6+
7+
class Solution(object):
8+
""" Basic idea is same as ugly number II.
9+
10+
New ugly number is generated by multiplying a prime with
11+
previous generated ugly number.
12+
One catch is need to remove duplicate.
13+
14+
Make code shorter and faster according to:
15+
https://discuss.leetcode.com/topic/33103/fast-python-solution-based-on-solution-for-ugly-number-ii
16+
"""
17+
def nthSuperUglyNumber(self, n, primes):
18+
k = len(primes)
19+
ugly_numbers = [1] * n
20+
index_record = [-1] * k
21+
value_record = [1] * k
22+
23+
ugly_index = 0
24+
while ugly_index < n:
25+
min_val = min(value_record)
26+
ugly_numbers[ugly_index] = min_val
27+
28+
for i in range(k):
29+
# Remove duplicate numbers here.
30+
if value_record[i] == min_val:
31+
index_record[i] += 1
32+
value_record[i] = primes[i] * ugly_numbers[index_record[i]]
33+
34+
ugly_index += 1
35+
36+
return ugly_numbers[n - 1]
37+
38+
"""
39+
2
40+
[2,3,5]
41+
100
42+
[2,3,5,7,11]
43+
5
44+
[2,3,5,7,11,13,17,19]
45+
"""

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@
201201
* 303. [Range Sum Query - Immutable](DynamicProgramming/303_RangeSumQueryImmutable.py)
202202
* 304. [Range Sum Query 2D - Immutable](DynamicProgramming/304_RangeSumQuery2DImmutable.py)
203203
* 309. [Best Time to Buy and Sell Stock with Cooldown](DynamicProgramming/309_BestTimeBuySellStockWithCooldown.py)
204+
* 313. [Super Ugly Number](DynamicProgramming/313_SuperUglyNumber.py)
204205
* 337. [House Robber III](DynamicProgramming/337_HouseRobberIII.py)
205206
* 368. [Largest Divisible Subset](DynamicProgramming/368_LargestDivisibleSubset.py)
206207
* 357. [Count Numbers with Unique Digits](DynamicProgramming/357_CountNumbersWithUniqueDigits.py)

0 commit comments

Comments
 (0)