dengxinyi 6 years ago
parent
commit
75ea16bc3e
1 changed files with 26 additions and 0 deletions
  1. 26 0
      medium/670.maximum-swap.go

+ 26 - 0
medium/670.maximum-swap.go

@@ -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
+}