题目描述
Java解决方法
class Solution {
public boolean isValidSudoku(char[][] board) {
//用一个三维数组即可解决,第三维0~2,代表行/列/子空间
//第一维0~8,代表第n行/列/子空间
//第二维0~8,代表1~9对应的数字
//其值代表行/列/子空间 的第n行/列/子空间 的1~9对应的数字 的出现的次数。次数初始化为0
int[][][] str = new int[9][9][3];
for(int i = 0;i < 9;i++)
{
for(int j = 0;j < 9;j++)
{
if(board[i][j] == '.')
{
continue;
}
int num = board[i][j] - '1';
//1~9对应数组中的下标减一
for(int k = 0;k < 3;k++)
{
if(k == 2)
{
if(str[j / 3 + (i / 3) * 3][num][k] != 0)
{
return false;
}
else
{
str[j / 3 + (i / 3) * 3][num][k] = 1;
}
}
else if(k == 0)
{
if(str[i][num][k] != 0)
{
return false;
}
else
{
str[i][num][k] = 1;
}
}
else
{
if(str[j][num][k] != 0)
{
return false;
}
else
{
str[j][num][k] = 1;
}
}
}
}
}
return true;
}
}