[Leetcode]670.Maximum Swap
链接:LeetCode670
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
要想得到最大的数值,自然是将最大的放最前面,那么我们在遍历数组的时候,如果出现最大值不在前面的情况,则将该位与最大数交换即可。另外,有一种情况,特别需要注意,例如出现8577的时候,我们自然是将5与7交换,但这里的7是指最末尾的7。这也很自然,我们要将大数放到尽量前面,也要将小数放到尽量后面。
代码如下:
python:
class Solution:
def maximumSwap(self, num: int) -> int:
nums = list(str(num))
sorted_nums = sorted(nums)[::-1]
for i in range(len(nums)):
if nums[i]!=sorted_nums[i]:
max_num = max(nums[i:])
index = len(nums)-1-nums[::-1].index(max_num)
nums[i],nums[index] = nums[index],nums[i]
break
return int(''.join(nums))
C++:
class Solution {
public:
int maximumSwap(int num) {
string res = to_string(num),back=res;
for(int i=res.size()-2;i>=0;--i){
back[i] = max(back[i],back[i+1]);
}
for(int i=0;i!=res.size();++i){
if(res[i]==back[i]) continue;
for(int j=res.size()-1;j>i;--j){
if (res[j]==back[i]){
swap(res[i],res[j]);
return stoi(res);
}
}
}
return stoi(res);
}
};
参考:[LeetCode] 670. Maximum Swap 最大置换(https://www.cnblogs.com/grandyang/p/7583875.html)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)