题目链接
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例1:
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例2:
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
给定数字的范围是 [0, 108]
今天又是一道简单题目,给你一个数字,你可以选择把这个数字中的任意两位进行替换或者不进行操作,使得这个数字尽可能的大,返回这个数字。数字范围也很小也就是108而已。要想使这个数字尽可能的大当然要要把最大的数字放到最前面了,那如果一开始这个数字就是从高到低就不需要进行操作了。最后因为涉及到数字之间的转换,所以可以转换为字符串来进行操作,这样方便一点,这里就可以用到to_string
用于将数字类型转换为字符串类型。这个函数通常用于将整数、浮点数等基本数据类型转换为它们的字符串表示形式。时间复杂度通常是线性的,即 O(n)
class Solution {
public:
int maximumSwap(int num) {
string str = to_string(num);
string s = str;
sort(s.rbegin(),s.rend());
if(str == s)
{
return num;
}
for(int i = 0;i < str.size();i++)
{
if(str[i] != s[i])
{
int idx;
for(int j = i;j < str.size();j++)
{
if(str[j] == s[i])
{
idx = j;
}
}
swap(str[idx],str[i]);
break;
}
}
int target = 0;
for(int i = 0;i < str.size();i++)
{
target = target * 10 + (str[i] - '0');
}
return target;
}
};