func nthUglyNumber(n int) int { nums := []int{1} next2, next3, next5 := 2, 3, 5 for i, i2, i3, i5 := 1, 0, 0, 0; i < n; i++ { next := next2 if next3 < next { next = next3 } if next5 < next { next = next5 } nums = append(nums, next) if next == next2 { i2++ next2 = nums[i2] * 2 } if next == next3 { i3++ next3 = nums[i3] * 3 } if next == next5 { i5++ next5 = nums[i5] * 5 } } return nums[n-1] }