判断是否为有效数独,检查每一行,每一列,和每一个9宫格就可。
class Solution {
public:
bool _isValid(vector<vector<char> > &board,int i,int j){
unordered_set<char> tmp;
int count = 0;
for(int p=0;p<3;++p){
for(int q=0;q<3;++q){
if(board[i+p][j+q]!='.'){
++count;
tmp.insert(board[i+p][j+q]);
}
}
}
if(tmp.size()!=count)
return false;
return true;
}
bool isValidSudoku(vector<vector<char> > &board) {
int n = board.size();
unordered_set<char> tmp;
for(int i=0;i<n;++i){
int count = 0;
tmp.clear();
for(int j=0;j<n;++j){
if(board[i][j]!='.'){
++count;
tmp.insert(board[i][j]);
}
}
if(tmp.size()!=count)
return false;
}
for(int j=0;j<n;++j){
int count = 0;
tmp.clear();
for(int i=0;i<n;++i){
if(board[i][j]!='.'){
++count;
tmp.insert(board[i][j]);
}
}
if(tmp.size()!=count)
return false;
}
int i=0,j=0;
for(int p=0;p<7;p+=3){
for(int q=0;q<7;q+=3){
if(!_isValid(board,i+p,j+q))
return false;
}
}
return true;
}
};