264.ugly-number-ii.go 448 B

12345678910111213141516171819202122232425262728
  1. func nthUglyNumber(n int) int {
  2. nums := []int{1}
  3. next2, next3, next5 := 2, 3, 5
  4. for i, i2, i3, i5 := 1, 0, 0, 0; i < n; i++ {
  5. next := next2
  6. if next3 < next {
  7. next = next3
  8. }
  9. if next5 < next {
  10. next = next5
  11. }
  12. nums = append(nums, next)
  13. if next == next2 {
  14. i2++
  15. next2 = nums[i2] * 2
  16. }
  17. if next == next3 {
  18. i3++
  19. next3 = nums[i3] * 3
  20. }
  21. if next == next5 {
  22. i5++
  23. next5 = nums[i5] * 5
  24. }
  25. }
  26. return nums[n-1]
  27. }