我正在学习 here 的 All unique combinations whose sum equals to K
教程。我需要修改程序以返回找到的第一个唯一组合。
所以我修改了代码以返回一个 final
数组,我也在 combination_rec
中传递了它。在调试代码时,我看到 final
的状态没有在递归堆栈中维护,我得到 []
作为返回值。
import copy
def combination(arr, sum):
arr.sort(reverse=False)
local = []
res = combination_rec(0, 0, sum, local, arr, [])
if res:
return res
return []
def combination_rec(length, total, sum, local, arr, final):
if total == sum:
final = copy.copy(local)
return final
for i in range(length, len(arr), 1):
if total + arr[i] > sum:
continue
if (i > length and arr[i] == arr[i - 1]):
continue
local.append(arr[i])
final = combination_rec(i + 1, total + arr[i], sum, local, arr, final)
local.remove(local[len(local) - 1])
return final
if __name__ == "__main__":
combination([6, 5, 4, 3], 8)
Expected Output
--------
[3,5]
Actual Output
--------
[]
课程概要
[3, 4, 4, 5, 6]
local.remove(local[len(local) - 1])
行,从子数组中删除 5 并继续考虑排序数组中的后续元素final
返回为 [3, 5]我做错了什么?
PS: 我知道第 4 步 - 后续的 for 循环迭代 - 是多余的。当 [3,4,5] 产生的总和大于它时,检查 [3,4,6] 是没有意义的。但这不是我关心的问题。我试图理解递归的返回值