670. Maximum Swap
题目内容
Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. Return the maximum valued number you could get.
Example 1:
Input: 2736
Output: 7236
Explanation: Swap the number 2 and the number 7.
Example 2:
Input: 9973
Output: 9973
Explanation: No swap.
Note:
The given number is in the range
[0,108]
分析
首先将数字变成数组,然后保存每个数字出现的最低位,然后查找有没有比自己低位但是比自己大的数字,有则交换之。
代码
class Solution {
public:
int maximumSwap(int num) {
string digits = to_string(num);
vector<int> buckets(10);
for (int i = 0; i < digits.size(); i++) {
buckets[digits[i] - '0'] = i;
}
for (int i = 0; i < digits.size(); i++) {
for (int k = 9; k > digits[i] - '0'; k--) {
if (buckets[k] > i) {
char tmp = digits[i];
digits[i] = digits[buckets[k]];
digits[buckets[k]] = tmp;
return atoi(digits.c_str());
}
}
}
return num;
}
};