美文网首页
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