2596. 检查骑士巡视方案

思路

  1. 应该使用模拟的方法
  2. 对比每次移动是否满足斜着走的规律即可
  3. 为了方便比较每次移动路径,需要将矩阵转化为路径序列

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public boolean checkValidGrid(int[][] grid) {
if (grid[0][0] != 0) {
return false;
}
int n = grid.length;
int[][] indices = new int[n * n][2];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
indices[grid[i][j]][0] = i;
indices[grid[i][j]][1] = j;
}
}
for (int i = 0; i < n * n - 1; i++) {
if (!isDiagonal(indices[i], indices[i + 1])) {
return false;
}
}
return true;
}

boolean isDiagonal(int[] p1, int[] p2) {
int diagonal = Math.abs((p1[0] - p2[0]) * (p1[1] - p2[1]));
return diagonal == 2;
}
}