[leetcode]Next Permutation

下一排列TAT

 

从右往左找到第一个非增的位置,也就是找到最右递减的开始位置的前一个。

定位这个。

然后又从右往左找比这个数大的。。。

交换着两个数。。

然后reverse之前的递减序列。。。

因为递减序列就木有next permutation了。。

所以找到最右的递减序列

那么前面那个肯定是要用比他大的代替啦,再反转递减序列,就是next permutation了

class Solution {
public:
    void nextPermutation(vector<int> &num) {
        int end = num.size() - 1;
        int povit = end;
        while(povit > 0){
            if(num[povit] > num[povit - 1]) break;
            povit --;
        }
        if(povit > 0){
            povit --; 
            int large = end;
            while(num[large] <= num[povit]) large --;
            swap(num[large] , num[povit]);
            reverse(num.begin() + povit + 1 , num.end());
        }else{
            reverse(num.begin() , num.end());
        }
    }
};
原文地址:https://www.cnblogs.com/x1957/p/3511314.html