个人思路总结:
这个题的一个难度就是怎么枚举每一个小子数独块。于是我偷看了大佬的方法:
block_index = (i/3)*3+j/3
至于怎么判断是否有重复的字符,我们可以用map数据结构(hash表)来处理。
然后依次做一次遍历即可。
代码如下:
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
vector<map<char,int>> rows(9);
vector<map<char,int>> columns(9);
vector<map<char,int>> block(9);
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
int box_index = (i/3)*3+j/3;
if(board[i][j]=='.')
continue;
if(rows[i].count(board[i][j])||columns[j].count(board[i][j])||block[box_index].count(board[i][j]))
return false;
rows[i][board[i][j]] = 1;
columns[j][board[i][j]] = 1;
block[box_index][board[i][j]] = 1;
}
}
return true;
}
};