码迷,mamicode.com
首页 > 其他好文 > 详细

670. Maximum Swap

时间:2020-04-21 15:26:28      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:xid   highlight   length   range   整数   ati   return   问题:   char   

问题:

给定一个非负整数,求只交换一次某两位的数字,使得值最大,求该最大值。

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 };

 

670. Maximum Swap

标签:xid   highlight   length   range   整数   ati   return   问题:   char   

原文地址:https://www.cnblogs.com/habibah-chang/p/12744383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!