1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| class Solution { public int maximumSwap(int num) { if (num <= 11) { return num; }
List<Integer> numList = new ArrayList<>(); while (num != 0) { numList.add(num % 10); num /= 10; } Collections.reverse(numList);
int[] rightMax = new int[numList.size()]; rightMax[rightMax.length - 1] = numList.size() - 1; for (int i = numList.size() - 2; i >= 0; i--) { if (numList.get(i) > numList.get(rightMax[i + 1])) { rightMax[i] = i; } else { rightMax[i] = rightMax[i + 1]; } }
for (int i = 0; i < numList.size() - 1; i++) { if (numList.get(i) < numList.get(rightMax[i + 1])) { swap(numList, i, rightMax[i + 1]); break; } }
int res = 0; for (int i = 0; i < numList.size(); i++) { res = res * 10 + numList.get(i); } return res; }
private void swap(List<Integer> numList, int i, int j) { Integer tmp = numList.get(i); numList.set(i, numList.get(j)); numList.set(j, tmp); } }
|