复习回顾-回溯算法-90. 子集 II 【犹豫】
注意点&感悟:
- 对过滤条件放在for里面,还是外面,有些犹豫了。【疑问,先搁置】
- 我感觉
- for 里面,应该是进去树枝的过程,
- for 外面写,应该是终止条件。
- ================
- 又看了一眼视频,for里面是取数的过程,所以,应该取数的过程,进行了剪枝。
自己独立写的代码:
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
# 难点去重 利用排序 借助used
nums.sort()
res = []
used = [0] * len(nums)
self.backtracking(nums,0,[],res,used)
return res
def backtracking(self,nums,start_index,path,res,used):
# 去重
res.append(path[:])
for i in range(start_index,len(nums)):
if i > 0 and nums[i] == nums[i-1] and used[i-1] == 0:
continue
path.append(nums[i])
used[i] = 1
self.backtracking(nums,i+1,path,res,used)
used[i] = 0
path.pop()
通过截图: