LeetCode-90. Subsets II

题目描述(中等难度)


78题升级版,大家可以先做 78 题。给定一个数组,输出所有它的子数组。区别在于,这道题给定的数组中,出现了重复的数字。

直接根据 78 题的思路去做。

解法一 回溯法

这个比较好改,我们只需要判断当前数字和上一个数字是否相同,相同的话跳过即可。当然,要把数字首先进行排序

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class import_Subsets2_1 {
	
	public static List<List<Integer>> subsetWithDup(int[] nums){
		List<List<Integer>>ans=new ArrayList<>();
		List<Integer> temp=new ArrayList<>();
		Arrays.sort(nums);
		getAns(nums,0,temp,ans);
		return ans;
	}

	private static void getAns(int[] nums, int start, List<Integer> temp, List<List<Integer>> ans) {
		ans.add(new ArrayList<>(temp));
		for(int i=start;i<nums.length;i++) {
			
			if(i>start && nums[i]==nums[i-1]) {
				continue;
			}
			temp.add(nums[i]);
			getAns(nums,i+1,temp,ans);
			temp.remove(temp.size()-1);
		}
	}
	public static void main(String args[]) {
		int[] nums= {1,2,3};
		List<List<Integer>> ans=subsetWithDup(nums);
		System.out.println(ans);
	}
}

时间复杂度:

空间复杂度:

发布了168 篇原创文章 · 获赞 49 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_35770067/article/details/104863145