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

 

相关文章:

  • 2021-11-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-16
  • 2021-10-23
  • 2021-07-07
  • 2021-09-24
  • 2021-12-17
  • 2021-09-15
  • 2021-09-29
相关资源
相似解决方案