骑士对Python的攻击
假设我们有一个二维二进制矩阵,表示一个矩形棋盘,这里0表示空单元格,1表示骑士。骑士可以水平移动两个正方形,垂直移动一个正方形,或者垂直移动两个正方形,水平移动一个正方形(就像棋盘骑士一样)。我们必须检查是否有两个骑士在互相攻击。
所以,如果输入像
000000然后输出将为True
为了解决这个问题,我们将遵循以下步骤-
row,col:=矩阵的行数,矩阵的列数
对于范围0到第1行的r,执行
如果A[r][c]不为零,则
如果nr在行范围内且nc在col范围内且A[nr,nc]为非零,则
返回True
对于[(r+1,c-2),(r+1,c+2),(r+2,c-1),(r+2,c+1)]中的每个nr,nc
对于0到col-1范围内的c,执行
返回False
让我们看下面的实现以更好地理解-
示例
class Solution:
def solve(self, A):
row, col = len(A), len(A[0])
for r in range(row):
for c in range(col):
if A[r][c]:
for nr, nc in ((r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)):
if 0 <= nr < row and 0 <= nc <col and
A[nr][nc]:
return True
return False
ob = Solution()
mat = [[0,0,0,0,0],
[0,1,0,0,0],
[0,0,0,1,0]]
print(ob.solve(mat))输入值
[[0,0,0,0,0], [0,1,0,0,0], [0,0,0,1,0]]
输出结果
True