Leetcode:31. Next Permutation

问题描述:Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

The replacement must be in-place and use only constant extra memory.

难度等级中等

不瞒小伙伴讲,就是LZ一开始根本看不明白题目到底是什么意思,哪怕用了google翻译。。。

后来还是经过大神的解释,才明白,是排列的问题

如果一个数组为1,2,3,
那么具体的排列顺序就是:

1, 2, 3,
1, 3, 2,
2, 1, 3,
2, 3, 1,
3, 1, 2, 
3, 2, 1,
1, 2, 3,

我们需要做的就是给定任意顺序的数组,找到其对应下一个数组

对应的算法其实就从数组的尾部开始,找到nums[i-1]

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

    }
};

(⊙o⊙)嗯

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页