给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736 输出: 7236 解释: 交换数字2和数字7。
思路:将数字转化为数组之后,降序排序,寻找到第一个与原数组位置相同值不一样的数,然后将降序后的数组该位置值在原数组寻找,将其与原数组该位置的值进行swap,即可答案。
重点:搜索值的时候应该从原数组的后面向前扫描,否则会出错,实例1993,假如从前向后扫描:9193,实际是9913
代码:
class Solution {
public:
static bool cmp22(int a,int b){
return a>b;
}
int maximumSwap(int num) {
int bit=1,i=0;
int nnum=num;
int bits[12],op[12];
while((nnum/10)!=0){
bit++;
op[i]=nnum%10;
bits[i++]=nnum%10;
nnum/=10;
}
bits[i]=nnum;
op[i]=nnum;
unsigned int res=0;
sort(bits,bits+bit,cmp22);
reverse(op,op+bit);
for(int i=0;i<bit;i++)
{
if(op[i]!=bits[i]){
int j=bit-1;
for(;j>i;j--)
{
if(op[j]==bits[i])
break;
}
swap(op[i],op[j]);
break;
}
}
i=0;
//reverse(op,op+bit);
while(bit-->0)
res=res*10+op[i++];
return res;
}
};