給定一個非負整數,你至多可以交換一次數字中的任意兩位。返回你能得到的最大值。
示例 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;
}
};