有效的数独
解题思路:
三次遍历。一次找行,一次找列,一次找9宫格。主要是9宫格如何确定i,j的初始值,可以看出横竖都只有三个9宫格,且分别开始数为0,3,6,为0,1,2的三倍,所以用m,n来确定i,j的取值。
代码:
public bool IsValidSudoku(char[][] board)
{
bool result = true;
for(int i=0;i<9;i++)
{
List<int> lgx = new List<int>();
for(int j=0;j<9;j++)
{
if(board[i][j]>'0'&&board[i][j]<='9')
{
if (lgx.Contains(board[i][j]))
return false;
else lgx.Add(board[i][j]);
}
}
}//验证行是否满足。
for (int i = 0; i < 9; i++)
{
List<int> lgx = new List<int>();
for (int j = 0; j < 9; j++)
{
if (board[j][i] > '0' && board[j][i] <= '9')
{
if (lgx.Contains(board[j][i]))
return false;
else lgx.Add(board[j][i]);
}
}
}//验证列是否满足。
for(int m=0;m<3;m++)
{
for(int n=0;n<3;n++)
{
List<int> lgx = new List<int>();
for(int i = 3 * m;i<(3*m)+3;i++)
{
for(int j = 3 * n;j<(3*n)+3;j++)
{
if (board[i][j] > '0' && board[i][j] <= '9')
{
if (lgx.Contains(board[i][j]))
return false;
else lgx.Add(board[i][j]);
}
}
}
}
}//验证每一个9*9是否满足。m,n用来确定i,j的取值。
return result;
}