36.有效的数独
思路:先判断每一行是否满足条件,再判断每一列是否满足,最后判断每一个3*3的方块是否满足。用数组sta来标记每个数字出现的情况。
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
bool flag=1;
for(int i=0;i<9;i++){
int sta[12];
memset(sta,0,sizeof sta);
for(int j=0;j<9;j++){
if(board[i][j]<'1'||board[i][j]>'9') continue;
if(!sta[board[i][j]-'0']){
sta[board[i][j]-'0']=1;
}else{
flag=0;
break;
}
}
if(!flag) break;
}
if(!flag) return false;
for(int i=0;i<9;i++){
int sta[12];
memset(sta,0,sizeof sta);
for(int j=0;j<9;j++){
if(board[j][i]<'1'||board[j][i]>'9') continue;
if(!sta[board[j][i]-'0']){
sta[board[j][i]-'0']=1;
}else{
flag=0;
break;
}
}
if(!flag) break;
}
if(!flag) return false;
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j+=3){
int sta[12];
memset(sta,0,sizeof sta);
for(int a=0;a<3;a++){
for(int b=0;b<3;b++){
if(board[i+a][j+b]<'1'||board[i+a][j+b]>'9') continue;
if(!sta[board[i+a][j+b]-'0']){
sta[board[i+a][j+b]-'0']=1;
}else{
flag=0;
break;
}
}
if(!flag) break;
}
if(!flag) break;
}
if(!flag) break;
}
if(!flag) return false;
return true;
}
};