我正在处理一个面试问题,事情是这样的: 你会得到一个高度和宽度可能不相等的二维数组,只包含 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