#可以优化的是 已经出现重复的了 就要从中间切断
class Solution{
public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] nums){
//什么都没有的时候,return 一个空的集合 首先做一个异常判断
ArrayList<ArrayList<Integer>> results=new ArrayList<>();
if (nums==null || nums.length==0){
return results;
}
//做一个排序
Arrays.sort(nums);
ArrayList<Integer> subset=new ArrayList<>();
subsetsHelper(nums,0,substet,results)
//从0开始添加元素,当前的subset开头的所有结果都放进去
return results;
}
//只被自己调了 避免12 21 重复的情况 startindex 标识
private void subsetsHelper(int[] nums,
int startIndex,
ArrayList<Integer> subset,
ArrayList<ArrayList<Integer>>results){
results.add(ArrayList<Integer> subset));
for (int i=startIndex;i<nums.length;i++){
//一样的并且前面没有挑过 last one is startIndex-1 i>startIndex说明没有挑
// attention to not beyond the range
if (i!=0&&nums[i]==num[i-1]&&i>startIndex){
continue;
}
subset.add(nums[i]);
subsetsHelper(nums,i+1,subset,results);#subset,results 传进去
subset.remove(subset.size()-1);#回溯 ,加一下再减掉
}
}
}
【求职准备day1 】 算法刷题 subsets
猜你喜欢
转载自blog.csdn.net/qq_40647378/article/details/103867592
今日推荐
周排行