算法系列——Subsets
程序员文章站
2024-03-16 13:34:34
...
题目描述
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],
[]
]
解题思路
递归回溯法,比如[1,2,3],第一次抽出1,然后在1的基础上加2,再加3。加完之后再往回返,去掉3,再去掉2,发现可以加3,形成[1,3],再到2,以此类推。
程序实现
public class Solution {
private List<List<Integer>> result=new ArrayList<List<Integer>>();
public List<List<Integer>> subsets(int[] nums) {
if(nums==null||nums.length==0)
return result;
Arrays.sort(nums);
//加入空集合
result.add(new ArrayList<Integer>());
List<Integer> path=new ArrayList<Integer>();
generate(nums,0,path);
return result;
}
private void generate(int[] nums,int start, List<Integer> path){
if(start==nums.length)
return;
for(int i=start;i<nums.length;i++){
path.add(nums[i]);
result.add(new ArrayList<Integer>(path));
generate(nums,i+1,path);
path.remove(path.size()-1);
}
}
}
上一篇: 最短路径—Floyd算法
下一篇: react 安装_如何安装React