STL-next permutation
过程:
从右往左,找到第一个A[i] < A[i+1];
从右往左,找到第一个A[j] > A[i], j > i;
交换A[i] 与 A[j];
将A[i + 1]之后的元素逆序(这里的i,j都是下标)。
代码:
1 class Solution { 2 public: 3 void nextPermutation(vector<int> &num) { 4 if(num.size() < 2) 5 return; 6 int i, j; 7 for(i = num.size() - 2; i >= 0 && num[i] >= num[i+1]; --i) //第一个有序对 8 ; 9 if(i < 0) //已经是逆序 10 { 11 reverse(num.begin(), num.end()); 12 return; 13 } 14 for(j = num.size() - 1; num[j] <= num[i]; --j) //第一个大于A[i]的 15 ; 16 swap(num[i], num[j]); 17 reverse(num.begin() + i + 1, num.end()); 18 } 19 };