题目:
我的代码:
class Solution {
public boolean checkValidGrid(int[][] grid) {
int n = grid.length;
// pot[i][0]表示row pot[i][1]表示col
int[][] pot = new int[n * n][2];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
pot[grid[i][j]][0] = i;
pot[grid[i][j]][1] = j;
}
}
int len = n * n;
for (int k = 0; k < n * n - 1; k++) {
int row0 = Math.abs(pot[k][0] - pot[k + 1][0]);
int col0 = Math.abs(pot[k][1] - pot[k + 1][1]);
if ( (row0 == 1 && col0 == 2) || (row0 == 2 && col0 == 1) ) {
continue;
} else {
return false;
}
}
return true;
}
}
将各方块上的值按照大小顺序存入pot数组中,并且存储row和col。pot[i][0]是i值得row,pot[i][1]是i值得col,最后遍历如果有一个不符合“日”字规则,则返回false,否则返回true。
运行代码后出错:
我自己在纸上演示了一遍,确实是正确的,因此怀疑是不是题有问题。
求大佬解答!!!
已解决!!题干已经说明必须是从左上角出发,即使必须满足grid[0][0] = 0。