class Solution {
private:
vector<vector<int>> res;
vector<int> path;
public:
vector<vector<int> > permute(vector<int> &num) {
int n = num.size();
vector<int> vis(n, 0);
dfs(num, vis);
return res;
}
void dfs(vector<int>& num, vector<int>& vis){
if(path.size() == num.size()){
res.push_back(path);
return;
}
for(int i=0; i<num.size(); i++){
if(vis[i] == 1){
continue;
}
vis[i] = 1;
path.push_back(num[i]);
dfs(num, vis);
vis[i] = 0;
path.pop_back();
}
}
};