美文网首页
next-permutation

next-permutation

作者: DaiMorph | 来源:发表于2019-10-04 16:02 被阅读0次

实现“下一个排列”函数,将排列中的数字重新排列成字典序中的下一个更大的排列。 如果这样的重新排列是不可能的,它必须重新排列为可能的最低顺序(即升序排序)
if(i==0) { reverse(num.begin(),num.end()); //当不存在升序,则当前排列是最大排列,只要旋转整个序列变成最小排列。
从前往后找第一个升序对的位置,找到升序对,则存在交换大小顺序.从后往前找比当前位置打的元素,交换之

class Solution {
public:
    void nextPermutation(vector<int> &num) {
        int i=num.size()-1;
        while(i&&num[i]<=num[i-1])i--;
        if(i==0)reverse(num.begin(),num.end());
        else{
            int j=num.size()-1;
            while(num[j]<=num[i-1])j--;
            swap(num[i-1],num[j]);
            reverse(num.begin()+i,num.end());
        }
    }
};

相关文章

网友评论

      本文标题:next-permutation

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