首先分成9个3*3的格子,判断是否格子内的数是否唯一。
然后判断9*9的整体,每行每列的数是否唯一。
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
bool mark[10];
for(int i = 0; i < 3; i ++)
for(int j = 0; j < 3; j ++) {
memset(mark, false, sizeof(mark));
for(int p = 0; p < 3; p ++) {
for(int q = 0; q < 3; q ++) {
int tx = p + i * 3;
int ty = q + j * 3;
if(board[tx][ty] == '.') continue;
else {
int t = board[tx][ty] - '0';
if(!mark[t]) mark[t] = true;
else return false;
}
}
}
}
for(int i = 0; i < 9; i ++) {
for(int j = 0; j < 9; j ++) {
memset(mark, false, sizeof(mark));
for(int k = 0; k < 9; k ++) {
if(board[i][k] == '.') continue;
else {
int t = board[i][k] - '0';
if(!mark[t]) mark[t] = true;
else return false;
}
}
memset(mark, false, sizeof(mark));
for(int k = 0; k < 9; k ++) {
if(board[k][j] == '.') continue;
else {
int t = board[k][j] - '0';
if(!mark[t]) mark[t] = true;
else return false;
}
}
}
}
return true;
}
};