首页 > 解决方案 > 返回数组还是布尔值?

问题描述

给定一个整数数组,找到数组中四个元素的任意一个组合,其总和等于给定值 X。我需要返回所有子数组的数组,验证我想以递归方式解决此问题的条件,我可以返回最终条件是真还是假,但不返回长度为 4 且总和 = X 的数组

def function(array, target):
    if len(array) == 4:
        if sum(array) == target:
            return True
        else:
            return False
    return function(array[1:], target) or function(array[:-1], target)

它为数组返回 False :[7, 4, 6, -1, 1, 2] 而不是 True

标签: pythonarraysrecursionsum

解决方案


递归不是在这里进行的好方法,因为您不想在“缩减”数组上应用相同的函数。您想测试所有组合,所以我强烈建议使用itertools.

itertools.combinations(my_array, my_length)使所有可能的组合my_array的元素都具有长度my_length,而不重复(这意味着顺序无关紧要,您不会同时拥有 [a,b] 和 [b,a])

from itertools import combinations
L = [1, 2, 3, 4, 5, 1]
target = 10

for i in combinations(L, 4):
    if sum(i) == target:
        print(i)

输出 :

(1, 2, 3, 4)
(1, 3, 5, 1)
(2, 3, 4, 1)

推荐阅读