Python的行为真的很奇怪

时间:2021-07-13 20:11:35

标签: python

我正在处理一个面试问题,事情是这样的: 你会得到一个高度和宽度可能不相等的二维数组,只包含 0 和 1。每个 0 代表土地,每个 1 代表河流的一部分。一条河流由任意数量的 1 组成,这些 1 要么水平相邻,要么垂直相邻(但不是对角相邻)。形成一条河流的相邻 1 的数量决定了它的大小。请注意,河流可以扭曲。换句话说,它不一定是垂直的直线或水平的直线;它可以是L形的。 这是我的回答: 逻辑是递归地查看矩阵一部分的侧面(在左侧,右侧,向下和向上) 如果是 0,则返回 0 并且它是河流的尽头 如果它是 1,它会再次环顾四周。 并且为了不多次计算相同的 1,您将其替换为 0。当然,在某些情况下,索引不好。这就是为什么当你输出矩阵时你返回 0。

def river(i,j,matrix):
    maxl=len(matrix)-1
    maxc=len(matrix[0])-1
    if i <= maxligne and j <= maxcollonne:
        if matrix[i][j]==1:
            matrix[i][j]=0
            return 1 + river(i+1,j,matrix)+ river(i,j+1,matrix)+ river(i-1,j,matrix)+river(i,j-1,matrix)
        else :
            return 0
    else :
        return 0
        
def riverSizes(matrix):
    L=[]
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            a=river(i,j,matrix)
            if a !=0:
            L.append(river(i,j,matrix))
    return L

问题是为什么它不起作用。 对于此示例,它不起作用:

[
    [1, 0, 0, 1],
    [1, 0, 1, 0],
    [0, 0, 1, 0],
    [1, 0, 1, 0]
  ]

预期的答案是:2,1,3,1 我给:4,3

0 个答案:

没有答案