



public boolean isValidSudoku(char[][] board) {
Set<Character>[] sets = new Set[18];
Set<Character> set ;
int[] nums = new int[18];
int count ;
for (int i = 0; i < sets.length; i++){
sets[i] = new HashSet<>();
}
for (int i = 0; i < 9; i++){
count = 0;
set = new HashSet<>();
for (int j = 0; j < 9; j++){
if ( '0'< board[i][j] && board[i][j] < ':'){
set .add(board[i][j]);
count ++;
sets[j].add(board[i][j]);
nums[j] ++;
if (i < 3 && j < 3){
sets[9].add(board[i][j] );
nums[9]++;
}else if (i < 3 && j < 6){
sets[10].add(board[i][j] );
nums[10]++;
}else if (i < 3 && j < 9){
sets[11].add(board[i][j] );
nums[11]++;
}else if (i < 6 && j < 3){
sets[12].add(board[i][j] );
nums[12]++;
}else if (i < 6 && j < 6){
sets[13].add(board[i][j] );
nums[13]++;
}else if (i < 6 && j < 9){
sets[14].add(board[i][j] );
nums[14]++;
}else if (i < 9 && j < 3){
sets[15].add(board[i][j] );
nums[15]++;
}else if (i < 9 && j < 6){
sets[16].add(board[i][j] );
nums[16]++;
}else if (i < 9 && j < 9){
sets[17].add(board[i][j] );
nums[17]++;
}
}
}
if (set.size() < count){
return false;
}
}
for (int i = 0; i < 18; i++){
if (sets[i].size() < nums[i]){
return false;
}
}
return true;
}