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;
}
}