|
@@ -0,0 +1,26 @@
|
|
|
+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
|
|
|
+}
|