Givena non-negative integer, you could swap two digits at most onceto get the maximum valued number. Return the maximum valued number you couldget.
Example1:
Input: 2736
Output: 7236
Explanation: Swap the number 2 and the number 7.
Example2:
Input: 9973
Output: 9973
Explanation: No swap.
Note:
1. The given number is in the range [0,108]
思路:要求给出一个数,交换它的两个位数,求进行这样操作之后得到的最大的一个数,我的思路是把num转换成string,然后从前往后遍历,对于每一个数,从后往前找到比当前位数大的里面最大的一个数,然后将这连个数交换位置,如果没有找到,按照从前往后的顺序测试下一个数,如果找到了,交换位置之后就得到了最大的那个数,
这里我在把string转换成int和int转换成string的考虑过程中花费的大量的时间,我是自己写算法来实现这个功能的,但是c++自己有自己的函数来实现这个效果,int转string: to_string(int),string转int: atoi(string.c_str()),string.size()和string.length()得到的结果是一样的
class Solution {
#include <string>
public:
int maximumSwap(int num) {
string numChange = "";
char max = 47; int maxIndex;
int temp = num % 10; num = num / 10;
numChange = (char)(temp + '0') +numChange;
while (num != 0)
{
temp = num % 10;
num = num / 10;
numChange = (char)(temp + '0') +numChange;
}
for (int i = 0; i < numChange.length();i++)
{
max = 47; maxIndex = -1;
for (int j = numChange.length() - 1;j >= i; j--)
{
if (numChange[j] >numChange[i])
{
if (numChange[j] >max)
{
maxIndex = j;
max = numChange[j];
}
}
}
if (maxIndex != -1)
{
swap(numChange[i],numChange[maxIndex]);
break;
}
}
return atoi(numChange.c_str());;
}
};