Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. Return the maximum valued number you could get.
Example 1:
Input: 2736 Output: 7236 Explanation: Swap the number 2 and the number 7.
Example 2:
Input: 9973 Output: 9973 Explanation: No swap.
Note:
- The given number is in the range [0, 108]
先找到每一位的值,用数组存储,然后递归,如果最高位是最大的值则不变继续检查次高位,否则将最大的值与最高位的值交换,这里要注意值重复的现象,规则是如果最大的值不是最高位上的,则将找到的最小位上的最大值交换到最高位,如果最高位是最大的值,之后出现相同的最大的值就不动,,,我也不知道我是否讲清楚了
具体参考1993-》9913
98368-》98863
void helper(int* temp,int count);
int maximumSwap(int num) {
int i=0;
int j;
int temp[9];
while(num){
temp[i++]=num%10;
num=num/10;
}
helper(temp,i);
for(j=i-1;j>=0;j--){
num=num*10+temp[j];
}
return num;
}
void helper(int* temp,int count){
int j;
int max=temp[count-1];
int pos=count-1;
int tmp;
if(count==1) return;
for(j=count-2;j>=0;j--){
if(temp[j]>max){
max=temp[j];
pos=j;
}
if(temp[j]==max && pos!=count-1)
{
max=temp[j];
pos=j;
}
}
if(pos!=count-1){
tmp=temp[pos];
temp[pos]=temp[count-1];
temp[count-1]=tmp;
}
else{
helper(temp,count-1);
}
}