670. Maximum Swap

Posted habibah-chang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 };

 

以上是关于670. Maximum Swap的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 670: Maximum Swap

LeetCode 670: Maximum Swap

670. Maximum Swap

670. Maximum Swap

java 670.最大Swap.java

LeetCode 0670. 最大交换