备忘
这题是很经典的回溯 + 剪枝的问题,看了大佬的写法自己写一下备忘;二刷的时候回来写注释。
C++ 代码
class Solution {
public:
vector<vector<int>> res;
vector<int> copy;
vector<vector<int>> permutation(vector<int>& nums) {
if(nums.empty())return {};
copy = nums;
dfs(0);
return res;
}
void dfs(int pos){
if(pos == copy.size() - 1){
res.push_back(copy);
return ;
}
unordered_set<int> used;
for(int i = pos; i < copy.size(); i ++ ){
if(used.count(copy[i]))
continue;
used.insert(copy[i]);
swap(copy[i], copy[pos]);
dfs(pos + 1);
swap(copy[i], copy[pos]);
}
}
};