1.题目

2.思路
(1)用二维数组rows存储行数组
(2)用二维数组column存储列数组
(3)用三维数组存储9个小矩阵(三行三列总共9个小矩阵)
遇到一个元素,则对该元素的行数组和列数组都进行计数,如果行数组和列数组的计数分别大于1,返回false;以及如果9个小矩阵的计数也大于1,则返回false;
例子:
假设在 (i=0, j=1) 位置看到字符 '5':
如果在同一行/列/子宫格里再次遇到 '5',对应位置的计数会变为 2,你就可以判定数独无效
java
int index = '5' - '1'; // 4
rows[0][4]++ // 第0行的"数字5"计数+1
columns[1][4]++ // 第1列的"数字5"计数+1
subboxes[0/3][1/3][4]++ // subboxes[0][0][4]++:左上角子宫格里的"数字5"计数+1
3.代码实现
java
class Solution {
public boolean isValidSudoku(char[][] board) {
int[][] rows=new int[9][9];
int[][] column=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 index=c-'0'-1;
rows[i][index]++;
column[j][index]++;
sub[i/3][j/3][index]++;
//这边的[index]代表当前的字符
if(rows[i][index]>1||column[j][index]>1||sub[i/3][j/3][index]>1)
{
return false;
}
}
}
}
return true;
}
}