[每日一题2020.06.24]leetcode #46 dfs
题目 : https://leetcode-cn.com/problems/permutations/
一道标准的dfs题, 用一个哈希map做标记, tmp用来记录路径
过程 : 标记 -- 加入路径 -- 下一层 -- 解除标记回溯
unordered_map<int, bool> mark; // 标记
vector<int> tmp; // 记录路径
vector<vector<int> > ans; // answer
int sizen;
void dfs(int index, vector<int>& nums) {
if (index == sizen) {
ans.push_back(tmp);
return;
}
for (int i = 0; i < sizen; ++i)
{
if (!mark[i]) {
mark[i] = true; // 标记
tmp[i] = nums[index]; // 加入路径
dfs(index + 1, nums); // 下一层dfs
mark[i] = false; // 解除标记, 回溯
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
sizen = nums.size();
for (int i = 0; i < sizen; ++i)
{
tmp.push_back(0);
}
dfs(0, nums);
return ans;
}