#include <vector> class Solution { public: void dfs(vector<vector<int>> & ans, vector<int> temp, vector<bool> vis, vector<int> num, int n){ if(n == temp.size()){ ans.push_back(temp); } for(int i = 0; i < n; i ++){ if(vis[i]) continue; //与有重复的全排列的区别就是,防止出现两个相同的元素排出一样的序列 temp.push_back(num[i]); vis[i] = true; dfs(ans, temp, vis, num, n); vis[i] = false; temp.pop_back(); } } vector<vector<int> > permute(vector<int>& num) { int n = num.size(); vector<vector<int>> ans; if(n == 0) return ans; vector<int> temp; vector<bool> vis(n, false); dfs(ans, temp, vis, num, n); return ans; } };