繁体   English   中英

在二维数组中查找特定的总和 - python 算法

[英]Find specific sum in a 2D array - python algorithms

我们得到了一个二维数组,并要求编写一个函数,该函数将在数组中搜索总和为给定目标总和的元素的特定子集,如果找到子集则返回 True,否则返回 False。 该子集的特殊性是任何两个元素不得取自二维数组的同一列或行。 例如,对于数组: T=[[1,2,3,4], [5,6,7,8], [9,5,6,7], [2,4,6,8]]和目标总和:target_sum = 26 输出应该为真,因为 T[0][1]+T[1][2]+T[2][0]+T[3][3] == 2+7 +9+8 == 26,同一个数组和target_sum = 20,因为T[0][0]+T[1][3]+T[2][1]+T[3][2 ]==20

这是我试过的:

def given_sum(T, target_sum, row=-1, current_sum=0, columns=set()):

    if target_sum==current_sum:
        return True
    if current_sum>target_sum:
        return False
    if row>=len(T)-1:
        return False
    row+=1
    for col in range(len(T)):
        if col in columns:
            continue
        columns.add(col)
        return given_sum(T, target_sum, row, current_sum+T[row][col],columns)
        columns.remove(col)

对于上面的示例数组: T=[[1,2,3,4], [5,6,7,8], [9,5,6,7], [2,4,6,8]] target_sum = 21,它打印 True,因为 T[0][0]+T[1][1]+T[2][2]+T[3][3]==21,但对于 target_sum = 26 ,尽管 T[0][1]+T[1][2]+T[2][0]+T[3][3]==26 但它仍打印 False 请帮忙!

只需将您的代码放入我的 IDE 即可告诉我:

然后添加given_sum(T=[[1,2,3,4], [5,6,7,8], [9,5,6,7], [2,4,6,8]], target_sum=26) ,放置三个调试点(每个return TrueFalse一个,这是你的终端案例),我得到:

row >= len(T) - 1 eveluates 到True ,所以它冒泡了False

没有真正检查过总和,所以我认为你的算法是错误的。
调试器可以让你很快到达那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM