给出一个数字 找出比它大的最小数字 - lifengyu360/lifengyu_first_git_test GitHub Wiki

class Solution {

public:

void nextPermutation(vector<int>& nums) {

/* int input = 24539;

    string str = to_string(input);

    vector<int> test;

    for (int i = 0; i < str.size(); i++){

        test.push_back(str[i] - '0');

        cout << " shuzi  = " << str[i] - '0' << endl;

    }

*/

   int i = nums.size() - 2;

    //从数组的最后一个元素倒着找到第一个前面值小于后面的序号 i

    while (i >= 0 && nums[i] >= nums[i + 1]) {
        i--;
    }

    //如果序号大于等于1 说明找到了位置
    if (i >= 0) {
        //重新倒着找下标j  找到第一个小于i值的那个序号j
        int j = nums.size() - 1;
        while (j >= 0 && nums[i] >= nums[j]) {
            cout << " j = " << j <<endl;
            j--;
        }
        //交换位置
        cout << " swap " << " i = " << i << "j = " << j <<endl;
        swap(nums[i], nums[j]);
    }
    cout << " i = " << i << endl;
    //注意这个翻转是从i+1的位置直到最后===================
    reverse(nums.begin() + i + 1, nums.end());
}

};

⚠️ **GitHub.com Fallback** ⚠️