|
1 | 1 | classSolution {
|
2 |
| -publicintmaximumSwap(intnum) { |
3 |
| -StringstringValue =Integer.toString(num); |
4 |
| -Map<Integer,Integer>valToIndexMap =newHashMap<>(); |
5 |
| -int[]digits =newint[String.valueOf(num).length()]; |
6 |
| -for (inti =digits.length -1;i >=0;i--) { |
7 |
| -intdigit =num %10; |
8 |
| -num /=10; |
9 |
| -digits[i] =digit; |
10 |
| -valToIndexMap.putIfAbsent(digit,i); |
11 |
| - } |
12 |
| -for (inti =0;i <digits.length;i++) { |
13 |
| -for (intk =9;k >digits[i];k--) { |
14 |
| -if (valToIndexMap.getOrDefault(k, -1) >i) { |
15 |
| -intswapIndex =valToIndexMap.get(k); |
16 |
| -returnInteger.parseInt( |
17 |
| -stringValue.substring(0,i)// Digits before swap index |
18 |
| - +k// Swapped value |
19 |
| - +stringValue.substring(i +1,swapIndex)// Digits after original index(i) and before swappedIndex |
20 |
| - +digits[i]// Digit at original index(i) |
21 |
| - + ((swapIndex +1) !=stringValue.length()// Check if swapIndex is last digit of num |
22 |
| - ?stringValue.substring(swapIndex +1)// If not then add digits that come after the swapIndex |
23 |
| - :""));// Else add an empty string |
| 2 | +publicintmaximumSwap(intnum) { |
| 3 | +char[]digits =String.valueOf(num).toCharArray(); |
| 4 | +intn =digits.length; |
| 5 | +int[]maxRightIdx =newint[n]; |
| 6 | +maxRightIdx[n -1] =n -1; |
| 7 | +for (inti =n -2;i >=0;i--) { |
| 8 | +maxRightIdx[i] = (digits[i] >digits[maxRightIdx[i +1]]) ?i :maxRightIdx[i +1]; |
| 9 | + } |
| 10 | +for (inti =0;i <n;i++) { |
| 11 | +if (digits[i] <digits[maxRightIdx[i]]) { |
| 12 | +chartemp =digits[i]; |
| 13 | +digits[i] =digits[maxRightIdx[i]]; |
| 14 | +digits[maxRightIdx[i]] =temp; |
| 15 | +returnInteger.parseInt(String.valueOf(digits)); |
| 16 | + } |
24 | 17 | }
|
25 |
| -} |
| 18 | +returnnum; |
26 | 19 | }
|
27 |
| -returnInteger.parseInt(stringValue); |
28 |
| - } |
29 | 20 | }
|