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