思路分析:
(1)定义三个二维数组,分别记录行上数字出现的次数、列上出现的次数以及在每个3x3格子中数字出现的次数。
(2)遍历整个数独,当碰到不是空白的时候,就判断该数字的出现次数是否为1,如果为1的话直接返回false,否则就把其赋为1。程序的最后返回true。
代码实现:
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int cols[11][11]={0},rows[11][11]={0},book[11][11]={0};
memset(cols,0,sizeof(cols));
memset(rows,0,sizeof(rows));
memset(book,0,sizeof(book));
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
{ if(board[i][j]=='.')
continue;
int num=board[i][j]-'0';
if(cols[i][num]==1||rows[j][num]==1||book[(i/3)*3+j/3][num]==1)
return false;
cols[i][num]=1;
rows[j][num]=1;
book[(i/3)*3+j/3][num]=1;
}
return true;
}
};