76 lines
1.9 KiB
Java
76 lines
1.9 KiB
Java
//给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
|
||
//
|
||
// 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
// 示例 1:
|
||
//
|
||
//
|
||
//输入:nums = [1,2,2]
|
||
//输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
|
||
//
|
||
//
|
||
// 示例 2:
|
||
//
|
||
//
|
||
//输入:nums = [0]
|
||
//输出:[[],[0]]
|
||
//
|
||
//
|
||
//
|
||
//
|
||
// 提示:
|
||
//
|
||
//
|
||
// 1 <= nums.length <= 10
|
||
// -10 <= nums[i] <= 10
|
||
//
|
||
//
|
||
//
|
||
// Related Topics 位运算 数组 回溯 👍 630 👎 0
|
||
|
||
package leetcode.editor.cn;
|
||
|
||
import java.util.ArrayList;
|
||
import java.util.Arrays;
|
||
import java.util.List;
|
||
|
||
//90:子集 II
|
||
class SubsetsIi {
|
||
public static void main(String[] args) {
|
||
//测试代码
|
||
Solution solution = new SubsetsIi().new Solution();
|
||
}
|
||
|
||
//力扣代码
|
||
//leetcode submit region begin(Prohibit modification and deletion)
|
||
class Solution {
|
||
public List<List<Integer>> subsetsWithDup(int[] nums) {
|
||
Arrays.sort(nums);
|
||
List<List<Integer>> result = new ArrayList<>();
|
||
dfs(nums,0,new ArrayList<>(),result,new ArrayList<>());
|
||
return result;
|
||
}
|
||
|
||
private void dfs(int[] nums, int index, List<Integer> list, List<List<Integer>> result, List<String> use) {
|
||
if (index == nums.length) {
|
||
List<Integer> temp = new ArrayList<>(list);
|
||
String key = Arrays.toString(temp.toArray());
|
||
if (!use.contains(key)) {
|
||
result.add(temp);
|
||
use.add(key);
|
||
}
|
||
return;
|
||
}
|
||
list.add(nums[index]);
|
||
dfs(nums, index + 1, list, result, use);
|
||
list.remove(list.size() - 1);
|
||
dfs(nums, index + 1, list, result, use);
|
||
}
|
||
}
|
||
//leetcode submit region end(Prohibit modification and deletion)
|
||
|
||
} |