给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
- 给定数字的范围是 [0, 10]
代码
class Solution {
public:
int maximumSwap(int num) {
vector<int> bits;
if(num == 0){
return 0;
}
while(num > 0){
bits.push_back(num % 10);
num = num / 10;
}
vector<int> order = bits;
reverse(bits.begin(), bits.end());
sort(order.begin(), order.end());
reverse(order.begin(), order.end());
int left = 0;
int right = 0;
int quit_flag = false;
for(int i = 0; i<order.size(); i++){
if(order[i] != bits[i] && quit_flag == false){
left = i;
for(int j = left;j<bits.size(); j++){
cout<<j<<" "<<bits[j]<<" "<<order[j]<<endl;
if(bits[j] == order[left]){
right = j;
quit_flag = true;
}
}
}
if(quit_flag == true){
break;
}
}
int temp = bits[left];
bits[left] = bits[right];
bits[right] = temp;
int res = 0;
for(int i = 0; i<bits.size(); i++){
res = 10 * res+ bits[i];
}
return res;
}
};