12345678910111213141516171819202122 |
- func nthSuperUglyNumber(n int, primes []int) int {
- ugly := []int{1}
- k := len(primes)
- index, product := make([]int, k), make([]int, k)
- copy(product, primes)
- for i := 1; i < n; i++ {
- idx, min := 0, product[0]
- for j := 0; j < k; j++ {
- if product[j] == ugly[i-1] {
- index[j]++
- product[j] = ugly[index[j]] * primes[j]
- }
- if product[j] < min {
- idx, min = j, product[j]
- }
- }
- ugly = append(ugly, min)
- index[idx]++
- product[idx] = ugly[index[idx]] * primes[idx]
- }
- return ugly[n-1]
- }
|