1957

无聊蛋疼的1957写的低端博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[leetcode]Next Permutation

Posted on 2014-01-08 20:50  1957  阅读(1894)  评论(0编辑  收藏  举报

下一排列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());
        }
    }
};