【求职准备day1 】 算法刷题 subsets

在这里插入图片描述

#可以优化的是 已经出现重复的了  就要从中间切断
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);#回溯 ,加一下再减掉
		}
    }
}								
发布了39 篇原创文章 · 获赞 1 · 访问量 447

猜你喜欢

转载自blog.csdn.net/qq_40647378/article/details/103867592
今日推荐