数组的下一个排列问题

来源:互联网 发布:kali linux教程 编辑:程序博客网 时间:2024/06/05 17:33

思路 :

1 用STL 函数 next_permutation();

代码:

 void nextPermutation(vector<int> &num) {        next_permutation(num.begin(), num.end());    }



2如果 数组是降序排列的,则返回反转数组。否则从前向后找到第一个升序对,然后在从后向前找到比当前位置大值,交换,再反转后面的数组。

代码:

 void nextPermutation(vector<int> &num) {        if(num.size()<=1)            return;        int i=num.size()-1;        while(i>0&&num[i]<=num[i-1])            i--;        if(i==0) //说明是降序,则反转整个数组            reverse(num.begin(),num.end());        else{            int j=num.size()-1;            while(j>0&&num[j]<=num[i-1])  //从后向前找出不小于num[i-1]的值                j--;            swap(num[i-1],num[i]);            reverse(num.begin()+i,num.end());        }    }