670.maximum-swap.go 558 B

1234567891011121314151617181920212223242526
  1. func maximumSwap(num int) int {
  2. digit := make([]int, 0)
  3. for i := num; 0 < i; i /= 10 {
  4. digit = append(digit, i%10)
  5. }
  6. n := len(digit)
  7. max := make([]int, n)
  8. for i := 1; i < n; i++ {
  9. max[i] = i // max[i]: the maximum digit that lower than the ith digit
  10. if digit[i] <= digit[max[i-1]] {
  11. max[i] = max[i-1]
  12. }
  13. }
  14. for i := n - 1; 0 <= i; i-- {
  15. if digit[i] < digit[max[i]] {
  16. digit[i], digit[max[i]] = digit[max[i]], digit[i]
  17. res := 0
  18. for j := n - 1; 0 <= j; j-- {
  19. res *= 10
  20. res += digit[j]
  21. }
  22. return res
  23. }
  24. }
  25. return num
  26. }