最大交换(java,算法,贪心)
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
给定数字的范围是 [0, 10的8次方]
package cn.itcast.algorithm.TTT_78; public class Main83 { public static void main(String[] args) { int num = 2736; int max = maximumSwap(num); System.out.println(max); } private static int maximumSwap(int num) { //num给定数字的范围是 [0, 10的8次方] String numStr = String.valueOf(num); int length = numStr.length(); int[] numArr = new int[length]; for (int i = 0; i < length; i++) { numArr[i] = numStr.charAt(i) - '0'; } for (int i = 0; i < length - 1; i++) { // 找出该位置后面最大且比它小的数,角标相同继续往后,然后交换 int maxIndex = i + 1; int maxNum = 0; for (int j = i + 1; j < length; j++) { if (numArr[j] >= maxNum && numArr[j] > numArr[i]) { maxNum = numArr[j]; maxIndex = j; } } if (maxNum != 0){ int temp = numArr[maxIndex]; numArr[maxIndex] = numArr[i]; numArr[i] = temp; break; } } StringBuilder resStr = new StringBuilder(); for (int i = 0; i < length; i++) { resStr.append(numArr[i]); } return Integer.valueOf(resStr.toString()); } }