给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736 输出: 7236 解释: 交换数字2和数字7。
示例 2 :
输入: 9973 输出: 9973 解释: 不需要交换。
注意:
- 给定数字的范围是 [0, 108]
思路比较简单,将数字转成int数组,对数组进行遍历,第一次条件满足r[i] < r[j]时候,
找到一个max_j, 使得r[max_j] >= r[j],其中max_j >=j。
然后再把int数组转换成数字即可。
class Solution {
public:
int maximumSwap(int num) {
vector<int> r;
do{
r.push_back(num%10);
num/=10;
}while(num!=0);
reverse(r.begin(),r.end());
bool op = false;
for(int i=0;i<r.size();i++){
int minj = -1;
for(int j=i+1;j<r.size();j++){
if((r[i]<r[j] && minj==-1)||(minj!=-1 && r[minj]<=r[j])){
minj = j;
}
if(j==r.size()-1 && minj!=-1){
r[i]^=r[minj];
r[minj]^=r[i];
r[i]^=r[minj];
op = true;
break;
}
}
if(op){
break;
}
}
int ret = 0;
for(int i=0;i<r.size();i++){
ret *= 10;
ret += r[i];
}
return ret;
}
};