670. Maximum Swap

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);
}
}

References

670. Maximum Swap