Subsets II
public class Solution {
/**
* @param nums: A set of numbers.
* @return: A list of lists. All valid subsets.
*/
public List<List<Integer>> subsetsWithDup(int[] nums) {
// write your code here
List<List<Integer>> result = new ArrayList<>();
List<Integer> path = new ArrayList<>();
Arrays.sort(nums);
dfs(nums, result, path, 0, -1);
return result;
}
private void dfs(int[] nums, List<List<Integer>> result, List<Integer> path, int index, int lastSelected) {
if (index == nums.length) {
result.add(new ArrayList<>(path));
return;
}
// not select
dfs(nums, result, path, index + 1, lastSelected);
// select
if (index > 0 && nums[index] == nums[index - 1] && lastSelected != index - 1) {
return;
}
path.add(nums[index]);
dfs(nums, result, path, index + 1, index);
path.remove(path.size() - 1);
}
}
最后更新于
这有帮助吗?