题目描述:
Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: nums = [1,2,3] Output: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
中文理解:
给定一个不含重复元素的数组,给出这个数组元素的子集。
解题思路:
使用回溯的思路,在回溯过程中就不断将不重复的集合给添加到结果中。
代码(java):
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res=new ArrayList();
if(nums.length==0)return res;
traceback(res,new ArrayList<Integer>(),nums,0);
res.add(new ArrayList<Integer>());
return res;
}
public void traceback(List<List<Integer>> res,List<Integer>tempList,int[] nums,int start){
if(tempList.size()==3 && start>=nums.length){
return;
}
for(int i=start;i<nums.length;i++){
if(tempList.contains(nums[i]))continue;
tempList.add(nums[i]);
res.add(new ArrayList(tempList));
traceback(res,tempList,nums,i+1);
tempList.remove(tempList.size()-1);
}
}
}