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