首页 > 代码库 > LeetCode--Next Permutation

LeetCode--Next Permutation

 

(1)从后往前,找到a[i]<a[i+1]

(2)从i后面找到最小的比a[i]大的元素,交换(i后面的元素都是递减的,所以实现就看自己的了)

(3)将i后的元素reverse一下即可

 1 class Solution { 2 public: 3     void nextPermutation(vector<int> &num) { 4         int end = num.size() - 1; 5         int povit = end; 6         while(povit > 0){ 7             if(num[povit] > num[povit - 1]) break; 8             povit --; 9         }10         if(povit > 0){11             povit --; 12             int large = end;13             while(num[large] <= num[povit]) large --;14             swap(num[large] , num[povit]);15             reverse(num.begin() + povit + 1 , num.end());16         }else{17             reverse(num.begin() , num.end());18         }19     }20 };

 

LeetCode--Next Permutation