这四个使用DFS来求解所有组合和排列的例子很有代表性,这里做一个总结:
1.不带重复元素的子集问题
1 public ArrayList<ArrayList<Integer>> subsets(int[] nums) { 2 // write your code here 3 ArrayList<ArrayList<Integer>> results = new ArrayList<>(); 4 if (nums == null || nums.length == 0) { 5 return results; 6 } 7 Arrays.sort(nums); 8 DFS(results, new ArrayList<Integer>(), nums, 0); 9 return results; 10 } 11 public void DFS(ArrayList<ArrayList<Integer>> results, ArrayList<Integer> cur, 12 int[] nums, int start) { 13 results.add(new ArrayList<Integer>(cur)); 14 for (int i = start; i < nums.length; i++) { 15 cur.add(nums[i]); 16 DFS(results, cur, nums, i+1); 17 cur.remove(cur.size()-1); 18 } 19 }