Keshawn_lu's Blog

Leetcode 670. 最大交换

字数统计: 270阅读时长: 1 min
2022/09/13 Share

题目简介:

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

示例 1 :

1
2
3
输入: 2736
输出: 7236
解释: 交换数字2和数字7。

示例 2 :

1
2
3
输入: 9973
输出: 9973
解释: 不需要交换。

注意:

  1. 给定数字的范围是 [0, 10^8]

思路:

贪心,首先将num转换为字符串并逆序排序,然后用另一个num的字符串去一一对应。

即要找到最靠近左边且不相等的数字,若temp[i] = 9, str_num[i] = 3

则从str_num[str_num.size() - 1]开始寻找9的位置,并交换即可。

tip:

  • string 转换为 int 可以使用stoi()

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
bool cmp(char& a, char& b){

return a > b;
}

class Solution {
public:
int maximumSwap(int num) {

string temp = to_string(num);

sort(temp.begin(), temp.end(), cmp);

string str_num = to_string(num);

for(int i = 0; i < str_num.size(); i++){

if(str_num[i] != temp[i]){

for(int j = str_num.size() - 1; j >= i; j--){

if(str_num[j] == temp[i]){

str_num[j] = str_num[i];
str_num[i] = temp[i];
break;
}
}

break;
}
}

return stoi(str_num);
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: