求每行或者每一列或者每个九宫格的数字都不重复且都为1到9之间的数字。而且不用考虑整体的合法性,虽然有空白的情况。
直接做就行了。
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int s[9][9],check_num[10];
for(int ii=0;ii<9;ii++){
for(int jj=0;jj<9;jj++){
if(board[ii][jj]=='.')s[ii][jj]=0;
else s[ii][jj]=board[ii][jj]-'0';
}
}
for(int ii=0;ii<9;ii++){
for(int jj=0;jj<10;jj++)check_num[jj]=1;
for(int jj=0;jj<9;jj++){
if(s[ii][jj]==0)continue;
if(check_num[s[ii][jj]])check_num[s[ii][jj]]--;
else return false;
}
}
for(int ii=0;ii<9;ii++){
for(int jj=0;jj<10;jj++)check_num[jj]=1;
for(int jj=0;jj<9;jj++){
if(s[jj][ii]==0)continue;
if(check_num[s[jj][ii]])check_num[s[jj][ii]]--;
else return false;
}
}
for(int ii=0;ii<9;ii+=3){
for(int jj=0;jj<9;jj+=3){
for(int i1=0;i1<10;i1++)check_num[i1]=1;
for(int i1=ii;i1<3+ii;i1++){
for(int j1=jj;j1<3+jj;j1++){
if(s[i1][j1]==0)continue;
if(check_num[s[i1][j1]])check_num[s[i1][j1]]--;
else return false;
}
}
}
}
return true;
}
};