说明:
array[2][2]
相当于两个一维数组;
array[3][2][2]
类比可知,相当于3个 2 * 2
的二维数组;
可以将三维数组比作一个立方体,这个立方体底面是个2 * 2
的正方形,高为 3
,如下图所示。
注意:三维数组的高维度是写在最前面的,也就是立方体的z;
[i / 3][j / 3][idx] :
3
个 3 * 9
的三维数组;
图解:
最后的本质还是: 建立一定长度的数组!
[i][j][idx]:
前面都是在确定建立多少层、多少个数组。i、j
就是用来定位数组
的!
Java代码1:
public boolean isValidSudoku(char[][] board) {
int[][] rows = new int[9][9];
int[][] cols = new int[9][9];
int[][][] sub = new int[3][3][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
char c = board[i][j];
if (c != '.') {
int idx = c - '0' - 1; // 以里面的数字做下标,值的大小==构造数组的长度
rows[i][idx]++; // 当前元素的行、列都不能有重复,构成一个二维数组
cols[j][idx]++;
sub[i / 3][j / 3][idx]++; // 值的大小==构造数组的长度
if (rows[i][idx] > 1 || cols[j][idx] > 1 || sub[i / 3][j / 3][idx] > 1) { // 元素重复
return false;
}
}
}
}
return true;
}