Recursion with backtracking.
class Solution {
public:
void helper(vector<vector<int> > &result, vector<int> &num, vector<int> cur, vector<bool> used, int n) {
if(n==num.size()) {
result.push_back(cur);
return;
}
for(int i=0;i<num.size();i++) {
if(!used[i]) {
cur[n]=num[i];
used[i]=true;
helper(result, num, cur, used,n+1);
used[i]=false;
}
}
}
vector<vector<int> > permute(vector<int> &num) {
vector<int> cur;
vector<bool> used;
for(int i=0;i<num.size();i++) {
cur.push_back(0);
used.push_back(false);
}
vector<vector<int> > r;
helper(r, num, cur, used, 0);
return r;
}
};