Given a set of distinct integers, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example, If nums = [1,2,3], a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]题意:给出一个集合,该集合的所有子集。
算法思路:从集合的第一个数开始,都分为两种情况,取或不取,一直搜索到最后一个数,得到2的n次方个集合,注意空集的存在。
java实现代码:
package leetcode; import java.util.ArrayList; import java.util.List; public class Solution { private List<List<Integer>> list = new ArrayList<List<Integer>>(); private void dfs(int index, int[] nums, List<Integer> subList){ if(index == nums.length){//递归结束 this.list.add(subList);//将得到的子集放入List return; } dfs(index + 1, nums, subList);//不取当前数直接往下递归 List<Integer> subList2 = new ArrayList<Integer>(); subList2.addAll(subList);//复制一份List对象 subList2.add(nums[index]);//取当前数 dfs(index + 1, nums, subList2); } public List<List<Integer>> subsets(int[] nums) { List<Integer> subList = new ArrayList<Integer>(); dfs(0, nums, subList); return list; } }