1 class Solution {
2 public:
3 vector<vector<int> > permute(vector<int> &num) {
4 // Note: The Solution object is instantiated only once and is reused by each test case.
5 sort(num.begin(),num.end());
6 vector<vector<int>> rlt;
7 rlt.push_back(num);
8 int n = num.size();
9 while (true){
10 int i;
11 for (i=n-2; i>=0; i--){
12 if (num[i]<num[i+1])
13 break;
14 }
15 if (i<0)
16 break;
17 int min = num[i+1];
18 int minIndex = i+1;
19 for (int j =i+1+1; j<n; j++){
20 if (num[j]>num[i] && num[j]<min){
21 min = num[j];
22 minIndex = j;
23 }
24 }
25 int tmp = num[i];
26 num[i] = num[minIndex];
27 num[minIndex] = tmp;
28 sort(&num[i+1], &num[n]);
29 rlt.push_back(num);
30 }
31 return rlt;
32 }
33 };