313.super-ugly-number.go 513 B

12345678910111213141516171819202122
  1. func nthSuperUglyNumber(n int, primes []int) int {
  2. ugly := []int{1}
  3. k := len(primes)
  4. index, product := make([]int, k), make([]int, k)
  5. copy(product, primes)
  6. for i := 1; i < n; i++ {
  7. idx, min := 0, product[0]
  8. for j := 0; j < k; j++ {
  9. if product[j] == ugly[i-1] {
  10. index[j]++
  11. product[j] = ugly[index[j]] * primes[j]
  12. }
  13. if product[j] < min {
  14. idx, min = j, product[j]
  15. }
  16. }
  17. ugly = append(ugly, min)
  18. index[idx]++
  19. product[idx] = ugly[index[idx]] * primes[idx]
  20. }
  21. return ugly[n-1]
  22. }