问题描述:
- 给定一个非负整数,至多可以交换一次数字中的任意两位,返回能得到的最大值。
核心思路:
- 该题只能交换一次,所以通常来讲可以用贪心策略来找到两个可交换的位置。
- 第一个需要交换的位置就可以被交换了,找到后续数字中最大的数字进行交换即可;要注意的是最大的数字如果有多个,需要用更后位置的数字进行交换。
- 看了题解,有部分题解分析了该题的任务就是选择排序的第一步。
- 评论区题解有另一个思路:将数字从大到小排列,与原数字比较,找出第一位置不一样的数。【其实就是选择排序结果与原数组比较】
代码实现:
class Solution
{
public:
int maximumSwap(int num)
{
string s = to_string(num);
for(int i = 0; i < s.size(); ++i)
{
int idx = i;
for(int j = s.size()-1; j > i; --j) if(s[j] > s[idx])
idx = j;
if(idx != i)
{
swap(s[i], s[idx]);
return stoi(s);
}
}
return num;
}
};