给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
/*
将数字从大到小排序后,与原数组比较,找出第一个不一样的,交换
*/
class Solution {
public:
int maximumSwap(int num) {
if(num <= 9) return num;
string s = to_string(num);
string temp(s);
sort(temp.rbegin(), temp.rend());
int pos = -1, n = s.length();
for(int i = 0;i < n; i++)
{
if(temp[i] != s[i])
{
pos = i;
break;
}
}
if(pos == -1) return num;
//从后往前找
for(int i = n - 1; i >= pos+1; i--)
{
if(s[i] == temp[pos])
{
swap(s[i], s[pos]);
break;
}
}
return stoi(s);
}
};