1.题目描述
2.思路讲解
1.一开始看通过率这么高以为很好做,但发现并不是那么回事,对我来说难度挺大
难点在怎么去想到用哈希表,以及如何分割开每个3x3的矩形,去判断是否有重复的数
2.引用
力扣
https://leetcode-cn.com/problems/valid-sudoku/solution/36-jiu-an-zhao-cong-zuo-wang-you-cong-shang-wang-x/这位大神,对分割矩形块讲的很好,我也是借鉴了他的思路,最后给自己做一个总结
3.图解
1.rows数组代表我们为记录每一行的数,所创建的哈希表。(其中rows每一行代表9x9表格中的每一行)。
2.columns数组代表我们记录每一列的数,所创建的哈希表。(其中columns每一行代表9x9表格中的没一列)。
3.box数组代表我们记录每一个3x3的表格中的数,所创建的哈希表。(其中box每一行代表不同的3x3矩形块)。
3.代码展示
bool isValidSudoku(char** board, int boardSize, int* boardColSize){
int row[9][10]={0};
int columns[9][10]={0};
int box[9][10]={0};
//上面分别创建三个哈希表
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
if(board[i][j]=='.')
{
continue;
}
int nums=board[i][j]-'0';//这个是转化,使字符变成数字
if(row[i][nums]) return false;//有数为真,return false,下面同理
if(columns[j][nums]) return false;
if(box[3*(i/3)+j/3][nums]) return false;
row[i][nums]=1;//上面都不符合,我们就得装值了,下面同理
columns[j][nums]=1;
box[3*(i/3)+j/3][nums]=1;
}
}
return true;
}
4.最终结果
5.总结
对我来说难度不算小,希望借这次总结,能把这种题型搞好