leetcode-90-子集②
题目描述:
方法一:回溯
class Solution: def subsetsWithDup(self, nums: List[int]) -> List[List[int]]: nums.sort() if not nums: return [] n = len(nums) res = [] def backtrack(i,temp): if temp not in res: res.append(temp) for j in range(i,n): backtrack(j+1,temp+[nums[j]]) backtrack(0,[]) return res
另:优化
class Solution: def subsetsWithDup(self, nums: List[int]) -> List[List[int]]: res = [] n = len(nums) nums.sort() def helper(idx, tmp): res.append(tmp) for i in range(idx, n): if i > idx and nums[i] == nums[i-1]: continue helper(i+1, tmp + [nums[i]]) helper(0, []) return res
方法二:迭代
class Solution: def subsetsWithDup(self, nums: List[int]) -> List[List[int]]: if not nums: return [] nums.sort() res = [[]] cur = [] for i in range(len(nums)): if i > 0 and nums[i - 1] == nums[i]: cur = [tmp + [nums[i]] for tmp in cur] else: cur = [tmp + [nums[i]] for tmp in res] res += cur return res