[每日一题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;
}
posted @ 2020-06-24 15:58  roccoshi  阅读(98)  评论(0编辑  收藏  举报