【问题标题】:Returning Array or Boolean?返回数组还是布尔值?
【发布时间】:2020-03-02 14:23:54
【问题描述】:

给定一个整数数组,找到数组中四个元素的任意一个组合,其总和等于给定值 X。我需要返回一个包含所有子数组的数组来验证条件 我想以递归的方式解决这个问题,我可以返回最终条件是 True 还是 False 但不返回长度为 4 且 sum = 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] 而不是真的

【问题讨论】:

  • 递归可能不适合解决这个问题,尤其是在 Python 中。
  • @AMC 好吧我放弃了 :(

标签: python arrays recursion sum


【解决方案1】:

递归不是在这里进行的好方法,因为您不想在“缩减”数组上应用相同的函数。你想测试所有组合,所以我强烈建议使用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)

【讨论】:

    【解决方案2】:

    我不确定我是否正确理解了您的问题 - 我的理解是您希望返回数组和目标值,以防数组的长度确实为 4 并且确实达到了目标值。对于这个问题,我想在您的代码中添加以下内容:

    def function(array, target):
    if len(array) == 4:
        if sum(array) == target:
            return True
        else:
            return False
    
    # Now this part returns array and target in case your provided conditions hold
    if function(array, target) == True:
        print(array, target)
    

    我是否正确理解了您的问题?

    【讨论】:

    • 我想以递归方式返回子数组而不是 True / [ ] 而不是 False
    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2012-08-08
    • 2011-09-13
    • 2013-02-10
    • 2017-11-23
    相关资源
    最近更新 更多