题目:
给你一个整数数组 nums
,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
思路:求子集的过程就相当于把树的所有节点记录下来。
第一步:确定参数与返回值。参数为数组nums,起始下标startIndex,无返回值
第二步:确定终止条件。当startIndex>=nums.length时,返回
第三步:确定单层递归逻辑。for循环遍历nums数组,区间为[startIndex,nums.length-1]。将nums[i]加入path中,递归剩下的数组元素,回溯
代码:
List<List<Integer>> result=new ArrayList<>();
List<Integer> path=new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
backTracking(nums,0);
return result;
}
public void backTracking(int[] nums,int startIndex){
result.add(new ArrayList(path));//遍历树时记录所有节点就是求子集
if(startIndex>=nums.length)
return;
for(int i=startIndex;i<nums.length;i++){
path.add(nums[i]);
backTracking(nums,i+1);
path.remove(path.size()-1);
}
}