package LeetCode_670 /** * 670. Maximum Swap * https://leetcode.com/problems/maximum-swap/description/ * * Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. * Return the maximum valued number you could get. Example 1: Input: 2736 Output: 7236 Explanation: Swap the number 2 and the number 7. * */ class Solution { fun maximumSwap(num: Int): Int { val numString = num.toString() var leftIndex = -1 var rightIndex = -1 var maxNum = -1 var maxIndex = -1 for (i in numString.length - 1 downTo 0) { if (maxNum < numString[i].toInt()) { maxNum = numString[i].toInt() maxIndex = i } if (maxNum > numString[i].toInt()) { leftIndex = i rightIndex = maxIndex } } if (leftIndex == -1) {//for example: 9973 return num } val chars = numString.toCharArray() swap(chars, leftIndex, rightIndex) return arrayToNum(chars) } private fun arrayToNum(array: CharArray): Int { var result = 0 for (item in array) { if (item.equals("")) { continue } result *= 10 result += (item.toInt() - '0'.toInt()) } return result } private fun swap(str: CharArray, start: Int, end: Int) { val temp = str[end] str[end] = str[start] str[start] = temp } }