classSolution: defcombine(self, nums, n, k): defbacktrack(start = 0, path = []): cur_len = len(path) if cur_len == k: res.append(path[:]) return for i inrange(start, n - (k - cur_len) + 1): d = nums[i] path.append(d) backtrack(i + 1, path) path.pop()
if k == n: return [nums] if n <= 0or k <= 0or k > n: return [[]] res = [] backtrack() return res
defsubsets(self, nums: List[int]) -> List[List[int]]: res = [] nums.sort() n = len(nums) for k inrange(0, n+1): res += self.combine(nums, n, k) return res
classSolution: defsubsets(self,nums): """ :type nums: List[int] :rtype: List[List[int]] """ ifnot nums: return [] n = len(nums) res = [] nums.sort()
defbacktrack(idx, n, temp_list): res.append(temp_list) for i inrange(idx, n): helper1(i + 1, n, temp_list + [nums[i]])
backtrack(0, n, []) return res
方法二 一次遍历(递归)
1 2 3 4 5 6 7 8 9 10 11
classSolution: defsubsets(self, nums: List[int]) -> List[List[int]]: res = [[]] for i in nums: tmp_res = res[:] for j in res: new = j[:] new += [i] tmp_res += [new[:]] res = tmp_res[:] return res
classSolution: defsubsets(self, nums: List[int]) -> List[List[int]]: output = [[]] for num in nums: output += [curr + [num] for curr in output] return output
classSolution: defsubsets(self, nums: List[int]) -> List[List[int]]: defconvertIntToSet(nums, k): sub = [] idx = 0 i = k while i>0: if i & 1 == 1: sub.append(nums[idx]) idx += 1 i >>= 1 return sub res = [] nums.sort() _max = 1 << len(nums) k = 0 while k < _max: out = convertIntToSet(nums, k) res.append(out) k += 1 return res