例题
1. 子集

代码
Python代码:
def subsets(self, nums: List[int]) -> List[List[int]]:def generate(i, nums, path, res):if i == len(nums):returnpath.append(nums[i])# if tuple(path) not in s:res.append(path.copy())# s.add(tuple(path))generate(i+1, nums, path, res)path.pop()generate(i+1, nums, path, res)path = []res = [[]]s = set()generate(0, nums, path, res)return res
二进制:
def subsets(self, nums: List[int]) -> List[List[int]]:n = len(nums)output = []for i in range(2**n, 2**(n + 1)):# generate bitmask, from 0..00 to 1..11bitmask = bin(i)[3:]# append subset corresponding to that bitmaskoutput.append([nums[j] for j in range(n) if bitmask[j] == '1'])return output
2. 子集2

代码
class Solution:def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:nums.sort()subset, result = [], [[]]self.DFS(nums, 0, len(nums), subset, result)return resultdef DFS(self, nums, start, end, subset, result):for i in range(start, end):if i > start and nums[i] == nums[i-1]:continuesubset.append(nums[i])result.append(subset[:])self.DFS(nums, i+1, end, subset, result)subset.pop()
