给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :

  1. 输入: 2736
  2. 输出: 7236
  3. 解释: 交换数字2和数字7

示例 2 :

输入: 9973
输出: 9973
解释: 不需要交换。

注意:

  1. 给定数字的范围是 [0, 10]

代码

class Solution {
public:
    int maximumSwap(int num) {
        vector<int> bits;
        if(num == 0){
            return 0;
        }
        while(num > 0){
            bits.push_back(num % 10);
            num = num / 10;
        }
        vector<int> order = bits;
        reverse(bits.begin(), bits.end());
        sort(order.begin(), order.end());
        reverse(order.begin(), order.end());
        int left = 0;
        int right = 0;
        int quit_flag = false;
        for(int i = 0; i<order.size(); i++){

            if(order[i] != bits[i] && quit_flag == false){
                left = i;
                for(int j = left;j<bits.size(); j++){
                    cout<<j<<" "<<bits[j]<<" "<<order[j]<<endl;
                    if(bits[j] == order[left]){
                        right = j;
                        quit_flag = true;
                    }
                }
            }
            if(quit_flag == true){
                break;
            }
        }
        int temp = bits[left];
        bits[left] = bits[right];
        bits[right] = temp;
        int res = 0;
        for(int i = 0; i<bits.size(); i++){
            res = 10 * res+ bits[i];
        }
        return res;

    }
};