1、题目描述
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
注意: 给定数字的范围是 [0, 10^8]
2、示例
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
3、题解
这种题目要么两重循环时间复杂度On^2空间复杂度O1,要么用哈希表时间复杂度On空间复杂度On。
基本思想:哈希表+贪心,先遍历一遍num,将num每一位上的数字用哈希表记录下标,然后再遍历一遍num,如果当前位上的数小于之后存在的数并且下标比当前位下标大,那么就交换这两个数。
class Solution {
public:
int maximumSwap(int num) {
string s=to_string(num);
vector<int> nums(10,-1);
for(int i=0;i<s.size();i++)
{
nums[s[i]-'0']=i;
}
for(int i=0;i<s.size();i++)
{
for(int j=9;j>=0;j--)
{
if(j+'0'>s[i]&&nums[j]>i)
{
swap(s[nums[j]],s[i]);
return stoi(s);
}
}
}
return stoi(s);
}
};