Next Permutation(Leetcode 31)

2016-11-06  本文已影响0人  stepsma

记住方法就可以,找到第一个nums[i] < nums[i+1] 的位置 i
然后从i+1往后扫,找到第一个小于nums[i]的位置 j,
最后swap(nums[i], nums[j-1]), 然后将 i 后面排序

重点是判断时一定都要加等于号。

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        if(nums.size() <= 1) return;
        int i=nums.size()-1;
        while(i > 0 && nums[i] <= nums[i-1]) i--;
        if(i == 0){
            reverse(nums.begin(), nums.end());
            return;
        }
        i--;
        int j = i+1;
        for(; j<nums.size(); j++){
            if(nums[j] <= nums[i]) break;
        }
        j--;
        swap(nums[i], nums[j]);
        sort(nums.begin()+i+1, nums.end());
    }
};
上一篇下一篇

猜你喜欢

热点阅读