Leetcode 670. 最大交换
题目
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
测试样例
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
- 给定数字的范围是 [0, 108]
题解
我们先找到第一次发生递增位置的下标i。然后,在此位置i之后找到最大的数的下标i。最后,再在位置i之前找到第一个比这个最大数小的数,然后进行交换。详细过程见代码
代码
int maximumSwap(int num) {
int maxNum = 0;
string numS = to_string(num);
int i=0;
for(i=1; i<numS.length(); i++){ //一开始递减序列我们不需要考虑
if(numS[i]>numS[i-1]) break;
}
if(i == numS.length()) return num;
for(int j=i+1; j<numS.length(); j++) //出现递增,在这之后找最大的数
if(numS[j]>=numS[i]) i=j;
for(int j=0; j<i; j++){ //和之前第一个最小的数进行替换
if(numS[j]<numS[i]){
swap(numS[j],numS[i]);
return stoi(numS);
}
}
return num;
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-swap
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。