问题:
给定一个非负整数,求只交换一次某两位的数字,使得值最大,求该最大值。
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 };