题目链接:https://leetcode.com/problems/subsets/
解题思路:
这里是经典回溯法解决问题,new ArrayList<>(item)这里是相当于new了一个新对象,不是在原始的对象上操作。
深度优先搜索
我会把所有的用回溯的题全部放在一起。
1 import java.util.ArrayList; 2 class Solution { 3 public List<List<Integer>> subsets(int[] nums) { 4 5 List<List<Integer>> res = new ArrayList<>(); 6 7 List<Integer> item = new ArrayList<>(); 8 9 Arrays.sort(nums); 10 11 dfs(res,item,nums,0); 12 13 return res; 14 15 16 } 17 18 public void dfs(List<List<Integer>> res,List<Integer>item,int []nums,int start) 19 { 20 res.add(new ArrayList<>(item));//这里相当于新创建了一个item对象,和原先的item已经不是同一个地址了 21 22 for(int i=start;i<nums.length;i++) 23 { 24 item.add(nums[i]); 25 dfs(res,item,nums,i+1); 26 27 item.remove(item.size()-1); 28 } 29 30 } 31 }