题目描述:
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
注意:
一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
空白格用 '.' 表示。
一、解题思路
呜呜呜我不会哈希表,目前没有学到这个
剩下的思路在代码旁边注释了
二、代码
代码如下(示例):
bool isValidSudoku(char** board, int boardSize, int* boardColSize){
int i,j,k;
int m,n;
for(i=0;i<boardSize;i++)
{
for(j=0;j<*boardColSize;j++)
{
if(board[i][j]!='.')//遍历数组找到1-9
{
for(k=0;k<*boardColSize;k++)
{
if(j!=k&&board[i][j]==board[i][k])//判断行
{
return false;
}
}
for(k=0;k<boardSize;k++)
{
if(i!=k&&board[k][j]==board[i][j])//判断列
{
return false;
}
}
int x=i/3*3;
int y=j/3*3;//这ge规律是看另一个大佬学到的
for(m=0;m<3;m++)
{
for(n=0;n<3;n++)
{
if(x+m!=i&&y+n!=j&&board[i][j]==board[x+m][y+n])//判断3*3数组
{
return false;
}
}
}
}
}
}
return true;
}