670. Maximum Swap
问题:
给定一个非负整数,求只交换一次某两位的数字,使得值最大,求该最大值。
Example 1: Input: 2736 Output: 7236 Explanation: Swap the number 2 and the number 7. Example 2: Input: 9973 Output: 9973 Explanation: No swap. Note: The given number is in the range [0, 108] |
解法:
从右向左遍历。
取得最大数字,
往左边轮询时,只要发现比他小的数字,即可先记下来,将来可以交换。
而越往左,替换的位数越高,所换得的数字会更大。
因此最后记下的数字,即是应该交换的数字。
代码参考:
1 class Solution { 2 public: 3 int maximumSwap(int num) { 4 string numchar=to_string(num); 5 int maxv=-1, maxidx, leftidx=0, rightidx=0; 6 for(int i=numchar.length()-1; i>=0; i--){ 7 if(numchar[i]>maxv){ 8 maxv=numchar[i]; 9 maxidx=i; 10 continue; 11 } 12 if(numchar[i]<maxv){ 13 leftidx=i; 14 rightidx=maxidx; 15 } 16 } 17 swap(numchar[leftidx],numchar[rightidx]); 18 return stoi(numchar); 19 } 20 };
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步