美文网首页
Next Permutation(Leetcode 31)

Next Permutation(Leetcode 31)

作者: stepsma | 来源:发表于2016-11-06 08:47 被阅读0次

    记住方法就可以,找到第一个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());
        }
    };
    

    相关文章

      网友评论

          本文标题:Next Permutation(Leetcode 31)

          本文链接:https://www.haomeiwen.com/subject/cngguttx.html