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] }