数独固定是9*9的空间,所以可以用三个9*10的二维数组记录行、列、块的取值情况,空间换时间且空间代价固定不大。 遍历一遍数独更新并判断即可。
public class Solution {
public boolean isValidSudoku(char[][] board) {
int [][]row = new int[9][10];
int [][]col = new int[9][10];
int [][]block = new int[9][10];
for( int i=0;i<9;i++ )
{
int rowNum = (i+1)/3;
if(((i+1)%3)!=0)
{
rowNum++;
}
for(int j=0;j<9;j++ )
{
if(board[i][j]=='.')
{
continue;
}
int colNum = (j+1)/3;
if((j+1)%3!=0)
{
colNum++;
}
int blockNum=(rowNum-1)*3+colNum-1;
int num = board[i][j]-48;
if(row[i][num]!=0||col[j][num]!=0||block[blockNum][num]!=0)
{
return false;
}
row[i][num]=1;col[j][num]=1;block[blockNum][num]=1;
}
}
return true;
}
}