声明:本题及相关刷题笔记同步github之中,欢迎Fork & Star GitHub:https://github.com/HoqiheChen。如有不足之处,烦请改正。QQ Mail:851774342@qq.com
Description
Given a set of distinct integers, nums, return all possible subsets (the power set).
Brief
求一个数组的所有组合。
Input
nums = [1,2,3]
Output
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
Explanation
The solution set must not contain duplicate subsets.
Ideas
回溯+递归。
如下图所示,为回溯和递归的过程。
回溯:
首先在结果中加入一个空集,接下来对于i位置的数num[i]有加或者不加两种选择。
当加入时,会考虑下一个数字的情况;当不加入时,则回到上一结点,走右边的逻辑。
递归:
当考虑的位置为数组的最后时,退出。
否则会递归往下走。
Code
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> item = new ArrayList<>();
res.add(item);
if(nums.length == 0){
return res;
}
generate(0,nums,item,res);
return res;
}
public void generate(int i,int[] nums,List<Integer> item,List<List<Integer>> result){
if(i == nums.length){
return;
}
item.add(nums[i]);
result.add(new ArrayList<>(item));
generate(i+1,nums,item,result);
item.remove(new Integer(nums[i]));
generate(i+1,nums,item,result);
}
}
声明:本题及相关刷题笔记同步github之中,欢迎Fork & Star GitHub:https://github.com/HoqiheChen。如有不足之处,烦请改正。QQ Mail:851774342@qq.com