方法1:
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
vector< vector< int> > res;
permutation( res, num, 0);
return res;
}
void permutation( vector< vector< int> > &res, vector< int> &num, int i){
if( i == num.size()){
res.push_back(num);
return;
}
for( int j = i; j < num.size(); ++j){
swap( num[i], num[j]);
permutation( res, num, i+1);
swap( num[j], num[i]);
}
}
void swap( int &a, int &b){
int tmp = a;
a = b;
b = tmp;
}
};
方法2:
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
vector< vector< int> > res;
if( num.size() <= 1){
res.push_back(num);
return res;
}
vector< vector< int> > post;
vector< int> cur = num;
vector< int> tmp;
for( int i = 0; i < num.size(); ++i){
cur = num;
cur.erase(cur.begin()+i);
post = permute(cur);
for( int j = 0; j < post.size(); ++j){
tmp = post[j];
tmp.insert( tmp.begin(), num[i]);
res.push_back(tmp);
}
}
return res;
}
};