Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'
.
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
Solution:
用hashset来保存已经访问过的值,如果加入hashset失败,则说明数已经出现过一次,无效的数独。
public boolean isValidSudoku(char[][] board) {
Set<Character> vset = new HashSet<Character>();
Set<Character> hset = new HashSet<Character>();
Set<Character> bset = new HashSet<Character>();
for(int i=0; i<9; i++) {
for(int j=0; j<9; j++) {
char hc = board[i][j];
if(hc != '.' && !hset.add(hc)) return false;
char vc = board[j][i];
if(vc != '.' && !vset.add(vc)) return false;
}
vset.clear();
hset.clear();
}
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
bset.clear();
for(int k=0; k<3; k++) {
for(int h=0; h<3; h++) {
char c = board[i*3+k][j*3+h];
if(c != '.' && !bset.add(c)) return false;
}
}
}
}
return true;
}