leetcode 78题
这是一类题,用DFS思路实现的
相关题型见leetcode DFS相关题
subsets题的描述是,求数组中所有可能的子数组
比如{1,2,3}返回{1} {1,2} {1,2,3} {1,3} {2} {2,3} {3}
构造一个二叉树,左子树表示选择该层处理的节点,右子树表示不选择,最终的叶节点就是所有子集合。
深度优先所有叶子节点
public List<List<Integer>> findSubsets(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
Arrays.sort(nums);
backtrack(list, new ArrayList<>(), nums, 0);
return list;
}
private void backtrack(List<List<Integer>> list , List<Integer> tempList,
int [] nums, int start){
list.add(new ArrayList<>(tempList));
for(int i = start; i < nums.length; i++){
tempList.add(nums[i]);
backtrack(list, tempList, nums, i + 1);
tempList.remove(tempList.size() - 1);
}
}
这是DFS基本模版,用这种写法,实现深度遍历二叉树。
切忌不要陷入递归循环的嵌套中,要用直觉,多刷类似的题。
数组下标指针,递归回溯后,减枝。
八皇后也是DFS类型的题。