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);
}
};