在Python中找到球落在网格框中的位置
假设我们有一个m x n的网格盒子,每个单元格的板都位于从右上到左下或从左上到右下的位置。 现在将一个球放入盒子中并检查该球是否到达盒子底部。 矩形网格给定为矩阵。 如果单元格标记为1,则对角线板延伸自左上到右下; 如果标记为-1,则该板从右上到左下角延伸。如果n个球放入箱中,我们必须找出有多少球到达了底部。
3×3网格盒子的示例。
因此,如果输入如下 mat =
1 | 1 | 1 | -1
-1 | 1 | 1 | -1
1 | -1 | -1 | 1
1 | -1 | 1 | -1
那么输出将是[-1,-1,-1,-1]
要解决这个问题,我们将按以下步骤进行 –
- i:mat中的行数
-
j:mat中的列数
-
res:一个新的列表
-
对于值范围为0到j的val,执行以下操作
- x:val
-
对于范围0到i的r,执行以下操作
- s:mat[r,x]
-
x:x + mat[r,x]
-
如果x < 0或x >= j或mat[r,x]与s不同,则
-
在res末尾添加元素-1
-
退出循环
-
否则,
- 在res末尾添加x
- x:val
- 返回res
示例
让我们看看以下实现以更好地理解
def solve(mat):
i, j = map(len, (mat, mat[0]))
res = []
for val in range(j):
x = val
for r in range(i):
s = mat[r][x]
x += mat[r][x]
if x < 0 or x >= j or mat[r][x] != s:
res += [-1]
break
else:
res += [x]
return res
print(solve([[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]))
输入
[[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]
输出
[-1, -1, -1, -1]