其他分享
首页 > 其他分享> > leetcode-华为专题-31. 下一个排列

leetcode-华为专题-31. 下一个排列

作者:互联网

 

 

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        // 我要比你大,还大的最小
        // 较小数尽量靠右, 所以从右往前找
        // 较大数尽可能小

        int i = nums.size()-2;
        // 寻找较小数
        while(i>=0&&nums[i]>=nums[i+1]){
            i--;
        }
        // cout<<"i: "<<i<<endl;
        // 如果i小于0,说明整个数组都是降序排列,直接返回升序排列结果
        if(i<0){
            sort(nums.begin(), nums.end());
            return;
        }
        // 因为i之后的肯定都是降序排列,所以直接从后往前找较大值
        int j = nums.size()-1;
        while(j>=0&&nums[i]>=nums[j]){
            j--;
        }
        
        swap(nums[i],nums[j]);  // 交换较大值与较小值
        sort(nums.begin()+i+1,nums.end());  // 将 i后面的元素升序排列。
        return;


    }
};

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        // 最快的方法
        next_permutation(nums.begin(), nums.end());
        return;
    }
};

 

标签:nextPermutation,end,nums,31,begin,public,华为,return,leetcode
来源: https://www.cnblogs.com/ymec/p/15149437.html