solution.md 1.5 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
# 子集 II

<p>给你一个整数数组 <code>nums</code> ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。</p><p>解集 <strong>不能</strong> 包含重复的子集。返回的解集中,子集可以按 <strong>任意顺序</strong> 排列。</p><div class="original__bRMd"><div><p> </p><p><strong>示例 1:</strong></p><pre><strong>输入:</strong>nums = [1,2,2]<strong><br />输出:</strong>[[],[1],[1,2],[1,2,2],[2],[2,2]]</pre><p><strong>示例 2:</strong></p><pre><strong>输入:</strong>nums = [0]<strong><br />输出:</strong>[[],[0]]</pre><p> </p><p><strong>提示:</strong></p><ul>	<li><code>1 <= nums.length <= 10</code></li>	<li><code>-10 <= nums[i] <= 10</code></li></ul></div></div>

## template

```java
class Solution {
	public List<List<Integer>> subsetsWithDup(int[] nums) {
		List<List<Integer>> retList = new ArrayList<>();
		retList.add(new ArrayList<>());
		if (nums == null || nums.length == 0)
			return retList;
		Arrays.sort(nums);
		List<Integer> tmp = new ArrayList<>();
		tmp.add(nums[0]);
		retList.add(tmp);
		if (nums.length == 1)
			return retList;
		int lastLen = 1;
		for (int i = 1; i < nums.length; i++) {
			int size = retList.size();
			if (nums[i] != nums[i - 1]) {
				lastLen = size;
			}
			for (int j = size - lastLen; j < size; j++) {
				List<Integer> inner = new ArrayList(retList.get(j));
				inner.add(nums[i]);
				retList.add(inner);
			}
		}
		return retList;
	}
}
```

## 答案

```java

```

## 选项

### A

```java

```

### B

```java

```

### C

```java

```