You are given an integer num. You can swap two digits at most once to get the maximum valued number.
Return the maximum valued number you can get.
Example 1:
Input: num = 2736 Output: 7236 Explanation: Swap the number 2 and the number 7.
Example 2:
Input: num = 9973 Output: 9973 Explanation: No swap.
Constraints:
0 <= num <= 108
Approach 01:
-
C++
-
Python
class Solution {
public:
int maximumSwap(int num) {
string numString = to_string(num);
vector<int> lastDigitIndex(10, -1); // {digit: last index}
// Record the last occurrence of each digit
for (int i = 0; i < numString.length(); ++i)
lastDigitIndex[numString[i] - '0'] = i;
// Find the first opportunity to swap for maximum value
for (int i = 0; i < numString.length(); ++i) {
for (int d = 9; d > numString[i] - '0'; --d) {
if (lastDigitIndex[d] > i) {
swap(numString[i], numString[lastDigitIndex[d]]);
return stoi(numString);
}
}
}
return num; // Return the original number if no swap occurs
}
};
class Solution:
def maximumSwap(self, num: int) -> int:
numString = list(str(num))
lastDigitIndex = [-1] * 10 # {digit: last index}
# Record the last occurrence of each digit
for i in range(len(numString)):
lastDigitIndex[int(numString[i])] = i
# Find the first opportunity to swap for maximum value
for i in range(len(numString)):
for d in range(9, int(numString[i]), -1):
if lastDigitIndex[d] > i:
numString[i], numString[lastDigitIndex[d]] = numString[lastDigitIndex[d]], numString[i]
return int(''.join(numString))
return num # Return the original number if no swap occurs
Time Complexity
- Conversion to String:
Converting the integer
numto a string usingto_string()takes \(O(d)\), where \(d\) is the number of digits in the integer. - Recording Last Occurrence:
The loop that records the last occurrence of each digit in the number string runs once for each digit, which is \(O(d)\).
- Finding Swap Opportunity:
The nested loop compares each digit with higher digits (9 down to the current digit). In the worst case, this would involve up to 9 comparisons for each digit, making this part of the algorithm \(O(9 \cdot d) = O(d)\).
- Overall Time Complexity:
Since the entire algorithm operates within \(O(d)\), where \(d\) is the number of digits in the number, the overall time complexity is \(O(d)\).
Space Complexity
- String and Auxiliary Data Structures:
We use a string representation of the number, which takes \(O(d)\) space, and a vector
lastDigitIndexof size 10 to store the last occurrence of each digit, which is \(O(1)\). - Swap Operation:
The swap operation is done in place, and the space used for the final integer conversion using
stoi()is constant. - Overall Space Complexity:
The overall space complexity is \(O(d)\), where \(d\) is the number of digits in the integer.