题目:Subsets
难度:medium
问题描述:
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], [] ]
解题思路:
同第77题,使用DFS回溯求解。没啥难度,甚至不用考虑nums里面有重复的数。具体代码如下:
public class m_78_Subsets {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> reslist=new ArrayList<List<Integer>>();
ArrayList<Integer> temp=new ArrayList<>();
DFS(nums,1,temp,reslist);
return reslist;
}
public void DFS(int[]nums,int step,ArrayList<Integer> temp,List<List<Integer>> reslist){
List<Integer> list=new ArrayList<Integer>(temp);
reslist.add(list);
showlist(list);
if(step>nums.length){
return;
}
for(int i=step;i<=nums.length;i++){
temp.add(nums[i-1]);
DFS(nums,i+1,temp,reslist);
temp.remove(temp.size()-1);
}
}
public static void showlist(List<Integer> list){
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+":");
}
System.out.println();
}
public static void main(String[]args){
int[]nums={1,2,3};
m_78_Subsets s=new m_78_Subsets();
s.subsets(nums);
}
}