https://leetcode.cn/problems/maximum-swap/ 给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 :

输入: 2736
输出: 7236
解释: 交换数字2和数字7。

示例 2 :

输入: 9973
输出: 9973
解释: 不需要交换。

注意:

  • 给定数字的范围是 \([0, 10^8]\)

# 题解

暴力

class Solution {
public:
int maximumSwap(int num) {
vector<int> a;
while(num){
a.push_back(num%10);
num/=10;
}
int t=1;
for(int j=1;j<a.size();j++){
if(t){
int n=a[a.size()-j];
int flag=a.size()-j;
for(int i=flag-1;i>=0;i--){
if((a[i]>n&&t==1)(a[i]>=n&&t==0)){
n=a[i];
flag=i;
t=0;
}
}
a[flag]=a[a.size()-j];
a[a.size()-j]=n;
}
}
for(int i=a.size()-1;i>=0;i--){
num*=10;
num+=a[i];
}
return num;
}
};

复杂度分析:

  • 时间复杂度 \(O (log^2n)\)
  • 空间复杂度 \(O (logn)\)