数独346,数独中的数组
36.有效数独
请判断一个9 x 9的数独是否有效。只需要根据以下规则验证已经填写的数字是否有效。
数字1-9在每行中只能出现一次。
数字1-9在每列中只能出现一次。
数字1-9在每个用粗实线隔开的3x3宫中只能出现一次。(请参考示例图)
注意:
有效的数独(部分填充)不一定是可解的。
只需要根据上述规则验证已经填写的数字是否有效。
空格用“.”表示。
示例1:
回车:board=
[[5,3,.,.,7,.,.,.,.]
,[6,.,.,1,9,5,.,.,.]
,[.,9,8,.,.,.,.,6,.]
,[8,.,.,.,6,.,.,.,3]
,[4,.,.,8,.,3,.,.,1]
,[7,.,.,.,2,.,.,.,6]
,[.,6,.,.,.,.,2,8,.]
,[.,.,.,4,1,9,.,.,5]
[.,.,.,.,8,.,., 7 , 9]]输出:真
示例2:
回车:board=
[[8,3,.,.,7,.,.,.,.]
,[6,.,.,1,9,5,.,.,.]
,[.,9,8,.,.,.,.,6,.]
,[8,.,.,.,6,.,.,.,3]
,[4,.,.,8,.,3,.,.,1]
,[7,.,.,.,2,.,.,.,6]
,[.,6,.,.,.,.,2,8,.]
,[.,.,.,4,1,9,.,.,5]
, [.,.,.,.,8,.,., 7 , 9]]输出:false
说明:除了第一行的第一位数字由5改为8外,空白处的其他数字与例1相同。但是这个数独是无效的,因为左上角的3x3宫有两个8。
资料来源:LeetCode
链接:https://leetcode.cn/problems/valid-sudoku
版权归领网所有。商业转载请联系官方授权,非商业转载请注明出处。
解决方案想法:
用三个9*9的矩阵row[i][num],col[i][num]和box[r][c]作为哈希表遍历board[i][k],其中I代表行,K代表列。Numboard [i] [k]表示数字-1row[i][num]:表示numcol[k][num]是否出现在第I行:表示numbox [r] [c]是否出现在第k列:r=i/3x3num/3,c=k/3x3 num%3,表示,
类别解决方案{
公共:
bool isValidSudoku(向量向量字符板){
int row[9][9]={ 0 };//row[i][k]表示第I行的数字k是否出现过,0表示从未出现过,1表示出现过。
int col[9][9]={ 0 };
int box[9][9]={ 0 };//从左到右,从上到下,每3 * 3 ^ 9个方块组成一个大格子。这个格子里有数字吗?
for(int I=0;I 9;我)
{
for(int k=0;K9;k)
{
char x=board[I][k];
if (x== . )
{
继续;
}
//这个数字曾经出现在I行、K列或框中吗
int num=x- 0 -1;
int r=I/3 * 3 num/3;
int c=k/3 * 3 num % 3;
if(row[I][num]==1 col[k][num]==1 box[r][c]==1)
{
返回false
}
row[I][num]=col[k][num]=box[r][c]=1;
}
}
返回true
}
};
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。