1日目のブラシタイトルサブセットを調製する[ジョブ]アルゴリズム

ここに画像を挿入説明

#可以优化的是 已经出现重复的了  就要从中间切断
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