public static boolean isValidSudoku(char[][] board) {
if(board == null ) {
return true;
}
int len = board.length;
for(int i = 0; i < len; i++) {
boolean[] flag = new boolean[len];
for(int j = 0; j < len; j++) {
if(board[i][j]>='0' && board[i][j] <='9' && flag[board[i][j]-'0'-1]) {
return false;
}else if(board[i][j]>='0' && board[i][j] <='9' && !flag[board[i][j]-'0'-1]){
flag[board[i][j]-'0'-1] = true;
}
}
}
for(int j = 0; j < len; j++) {
boolean[] flag = new boolean[len];
for(int i = 0; i < len; i++) {
if(board[i][j]>='0' && board[i][j] <='9' && flag[board[i][j]-'0'-1]) {
return false;
}else if(board[i][j]>='0' && board[i][j] <='9' && !flag[board[i][j]-'0'-1]){
flag[board[i][j]-'0'-1] = true;
}
}
}
int count = len/3;
for(int i = 0; i < count; i++) {
for(int j = 0; j < count;j++) {
boolean[] flag = new boolean[len];
for(int m = i*3; m <i*3+3 ;m++) {
for(int n = j*3; n < j*3+3; n++) {
if(board[m][n]>='0' && board[m][n] <='9' && flag[board[m][n]-'0'-1]) {
return false;
}else if(board[m][n]>='0' && board[m][n] <='9' && !flag[board[m][n]-'0'-1]) {
flag[board[m][n]-'0'-1] = true;
}
}
}
}
}
return true;
}