美文网首页
Next Permutation

Next Permutation

作者: BigBig_Fish | 来源:发表于2017-10-20 11:25 被阅读0次

字典序全排列:
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
例如:

1 、2 、3三个元素的全排列为:

{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}。

思路:

从后向前找出第一个num[i]小于num[i+1]的数,将num[i]与num[i+1:len-1]中最小的大于num[i]的数交换,然后将num[i+1:len-1]排序。

代码:

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int len=nums.size();
        int cur=len-1;
        for(int i=len-2; i>=0; i--){
            if(nums[i] < nums[i+1]){
                int left=i+1, right=len-1;
                while(left <= right){
                    int mid=left+(right-left)/2;
                    if(nums[mid] > nums[i]) left = mid+1;
                    else right = mid-1;
                }
                swap(nums[i], nums[right]);
                sort(nums.begin()+i+1, nums.end());
                return;
            }
        }
        reverse(nums.begin(), nums.end());
        return ;
    }
};

相关文章

网友评论

      本文标题:Next Permutation

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