class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board) {
int row,col,block;
char ch;
vector<int> flags(9,0);
//rows
for(row=0;row<9;row++){
flags.assign(9,0);
for(col=0;col<9;col++){
ch=board[row][col];
if(ch!='.'){
if(flags[ch-'1']>0){
return false;
}else{
flags[ch-'1']++;
}
}
}
}
//cols
for(col=0;col<9;col++){
flags.assign(9,0);
for(row=0;row<9;row++){
ch=board[row][col];
if(ch!='.'){
if(flags[ch-'1']>0){
return false;
}else{
flags[ch-'1']++;
}
}
}
}
//blocks
for(block=0;block<9;block++){
int srow=(block/3)*3;
int scol=(block%3)*3;
flags.assign(9,0);
for(row=srow;row<srow+3;row++){
for(col=scol;col<scol+3;col++){
ch=board[row][col];
if(ch!='.'){
if(flags[ch-'1']>0){
return false;
}else{
flags[ch-'1']++;
}
}
}
}
}
return true;
}
};
class Solution {
public:
bool checkValid(int vec[],int val){
if(vec[val]==1){
return false;
}
vec[val]=1;
return true;
}
bool isValidSudoku(vector<vector<char>>& board) {
int rowValid[10]={0};
int colValid[9][10]={0};
int subBoardValid[9][10]={0};
for(int i=0;i<9;++i){
memset(rowValid,0,sizeof(rowValid));
for(int j=0;j<9;++j){
if(board[i][j]!='.'){
if(!checkValid(rowValid,board[i][j]-'0')||!checkValid(colValid[j],board[i][j]-'0')||!checkValid(subBoardValid[i/3*3+j/3],board[i][j]-'0')){
return false;
}
}
}
}
return true;
}
};
优化空间
class Solution {
public:
bool checkValid(int vec[],int val){
if(val<0){//字符'.'
return true;
}
if(vec[val]==1){
return false;//already exist
}
vec[val]=1;
return true;
}
bool isValidSudoku(vector<vector<char>>& board) {
int rowValid[10]={0};
int colValid[10]={0};
int subBoardValid[10]={0};
for(int i=0;i<9;++i){
memset(rowValid,0,sizeof(rowValid));
memset(colValid,0,sizeof(colValid));
memset(subBoardValid,0,sizeof(subBoardValid));
for(int j=0;j<9;++j){
//if(board[i][j]!='.'){
if(!checkValid(rowValid,board[i][j]-'0')||!checkValid(colValid,board[j][i]-'0')||!checkValid(subBoardValid,board[3*(i/3)+j/3][3*(i%3)+j%3]-'0')){
return false;
}
//}
}
}
return true;
}
};