原题
https://leetcode.cn/problems/subsets-ii/description/
思路
回溯法 + 去重
复杂度
时间:O(C(n,n))
空间:O(C(n,n))
Python代码
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
ans = []
nums.sort()
def dfs(start, path):
ans.append(path[:])
for i in range(start, len(nums)):
if i > start and nums[i] == nums[i-1]:
continue
dfs(i+1, path + [nums[i]])
dfs(0, [])
return ans
Go代码
func subsetsWithDup(nums []int) [][]int {
var ans [][]int
sort.Ints(nums)
// 匿名函数
var dfs func(int, []int)
dfs = func(start int, path []int) {
com := make([]int, len(path))
copy(com, path)
ans = append(ans, com)
for i := start; i < len(nums); i++ {
if i > start && nums[i] == nums[i-1] {
continue
}
dfs(i+1, append(path, nums[i]))
}
}
dfs(0, []int{})
return ans
}
277

被折叠的 条评论
为什么被折叠?



