题目描述
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
C++
class Solution {
public:
int maximumSwap(int num) {
/*
将数值拆开放到vector;
判断最大值是否在最高位;
若是,判断次大值是否在次位;
以此类推...
*/
vector<int> b;
int n=num;
while(n){
int temp=n%10;
b.insert(b.begin(),temp);//在数组头插入数
n=n/10;
}
//以上几句完全可以由下句替代 string b = to_string(num);
for(int i=0;i<b.size();i++)
{
int temp=i;
for(int k=i+1; k<b.size();k++){
if(b[k]>=b[temp]){
temp=k; //为了找到最大值所在的下标
}
}
if(i!=temp &&b[i]!=b[temp]){
swap(b[i],b[temp]);
break;
}
}
//再将B输出成一个数
//以下几句,完全可以由该句取代 return stoi(b);
int sum=b[b.size()-1];
for(int i=b.size()-2; i>=0; i--){
sum+=b[i]*pow(10,b.size()-i-1);
}
return sum;
}
};
对C++现成函数知道太少了, 整数变成数组,我是自己本方法存到数组实现了,之后看到别人的答案才知道了 stoi 这类函数。 需要积累啊