# 给定一个数组,有重复元素,输出和为target的所有的组合,例如1出现2次,结果path中也可以出现2次 target = 8 nums = [10, 1, 2, 7, 6, 1, 5] path = [] res = [] visit = [0] * len(nums) # 树层去重,树枝不用去重 def call_back(target, path, start_index, nums, res, visit): if sum(path) > target: return if sum(path) == target: print(path) res.append(path[:]) return for i in range(start_index, len(nums)): if i > 0 and nums[i] == nums[i-1] and visit[i-1] == 0: continue path.append(nums[i]) visit[i] = 1 call_back(target, path, i+1, nums, res, visit) path.pop() visit[i] = 0 print(path) return res nums.sort() print(nums) result = call_back(target, path, 0, nums, res, visit) print(result)
7.回溯算法-组合总和2.py
于 2023-12-06 21:24:36 首次发布