Next Permutation
void swap(int* a,int* b) { int tmp = *a; *a = *b; *b = tmp; } void reverse(vector<int> &num,int i,int j) { while(i<j) swap(&num[i++],&num[j--]); } class Solution { public: void nextPermutation(vector<int> &num) { // Start typing your C/C++ solution below // DO NOT write int main() function if(num.empty()) return; int i,j; for(i=num.size()-2;i>=0;i--) { if(num[i]<num[i+1]) //逆序 { j = i+1; while(j+1<=num.size()-1&&num[j+1]>num[i]) j++; swap(&num[i],&num[j]); reverse(num,i+1,num.size()-1); return; } } reverse(num,0,num.size()-1); } };