原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xv67o6/
解法一:
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
backstrack(list,new ArrayList<Integer>(),nums,0);
return list;
}
private void backstrack(List<List<Integer>> list,List<Integer> tmpList,int[] nums,int start) {
list.add(new ArrayList<>(tmpList));
for (int i = start ; i < nums.length; i++) {
tmpList.add(nums[i]);
backstrack(list,tmpList,nums,i + 1);
tmpList.remove(tmpList.size()-1);
}
}
}
思路:回溯法,我们把排列的子集想象成一颗n差树,前序遍历,每次遍历都需要进行回溯