回溯三步
Choose
Explore
UnChoose
return条件
stack.size() == nums.length
一.对于求全排列类型问题
需要一个visited数组标记该位置元素是否被使用过
dfs方法需要for…loop,并判断visited[i]==true 就跳过此次循环
(1)不考虑去重(LeetCode46)
不需要对Arrays.sort(nums)
(2)考虑去重(LeetCode47)
需要对Arrays.sort(nums)
dfs中判断
if(i > 0 && nums[i] == nums[i - 1] && visited[i - 1] == false)
二.对于求子集类型问题
不需要visited数组,不需要for循环
需要调用两次dfs(Choose与UnChoose各一次)
(1)不考虑去重(LeetCode78)
(2)考虑去重(LeetCode90)
需要While判断
如果下一个数和当前数相同,跳到下一个数的位置