题目简介:
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
1 2 3
| 输入: 2736 输出: 7236 解释: 交换数字2和数字7。
|
示例 2 :
1 2 3
| 输入: 9973 输出: 9973 解释: 不需要交换。
|
注意:
- 给定数字的范围是 [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); } };
|