1234567891011121314151617181920212223242526 |
- func maximumSwap(num int) int {
- digit := make([]int, 0)
- for i := num; 0 < i; i /= 10 {
- digit = append(digit, i%10)
- }
- n := len(digit)
- max := make([]int, n)
- for i := 1; i < n; i++ {
- max[i] = i // max[i]: the maximum digit that lower than the ith digit
- if digit[i] <= digit[max[i-1]] {
- max[i] = max[i-1]
- }
- }
- for i := n - 1; 0 <= i; i-- {
- if digit[i] < digit[max[i]] {
- digit[i], digit[max[i]] = digit[max[i]], digit[i]
- res := 0
- for j := n - 1; 0 <= j; j-- {
- res *= 10
- res += digit[j]
- }
- return res
- }
- }
- return num
- }
|