给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
这一题可以采用回溯算法。
我附上一段测试代码,帮助大家理解回溯的过程。而不是从理论上去讲递归怎么运行,递归运行只有一个结果,对递归不熟悉的朋友们根本无法理解。
只有搞清递归运行的过程才能真正解决回溯问题,不然都是耍流氓。
先附上递归每一步的操作。
public class Solution {
public static void main(String[] args) {
int[] a=new int[]{0,1,2,3};
System.out.println(new Solution().subsets(a));
}
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res=new LinkedList<>();
back(nums,res,new LinkedList(),0);
return res;
}
void back(int[] nums,List<List<Integer>> res,LinkedList<Integer> list,int start){
res.add(new LinkedList<>(list));
System.out.println(new LinkedList<>(list));
for(int i=start;i<nums.length;i++){
list.add(nums[i]);
System.out.println("add:"+nums[i]);
back(nums,res,list,i+1);
System.out.println("remove:"+nums[i]);
list.removeLast();
}
}
}