骑士对Python的攻击
假设我们有一个二维二进制矩阵,表示一个矩形棋盘,这里0表示空单元格,1表示骑士。骑士可以水平移动两个正方形,垂直移动一个正方形,或者垂直移动两个正方形,水平移动一个正方形(就像棋盘骑士一样)。我们必须检查是否有两个骑士在互相攻击。
所以,如果输入像
0
0
0
0
0
0
然后输出将为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