题目:
判断一个数独是否有效,根据:Sudoku Puzzles - The Rules。
数独部分填了数字,空的部分用 '.'
表示。
一个部分填充是有效的数独。
说明:
一个有效的数独(填了一部分的)不一定是可解的,只要已经填的数字是有效的即可。
解题:判断一个数独是否有效,只要判断每一个行、列、方格有没有重复的数字;通过Set集合来存储每一行的数字;
代码:
class Solution {
public boolean isValidSudoku(char[][] board) {
if(null == board || board.length < 9){
return false;
}
Set<Character> rowSet = new HashSet<Character>();
Set<Character> colSet = new HashSet<Character>();
Set<Character> cardSet = new HashSet<Character>();
for(int i=0;i<9;i++){
rowSet.clear();
colSet.clear();
cardSet.clear();
for(int j=0;j<9;j++){
if(rowSet.contains(board[i][j])){
return false;
}else{
if(board[i][j] != '.'){
rowSet.add(board[i][j]);
}
}
if(colSet.contains(board[j][i])){
return false;
}else{
if(board[j][i] != '.'){
colSet.add(board[j][i]);
}
} // 计算九宫格的行列下标
int r = j/3+i/3*3;
int c = (j%3+i*3) % 9;
if(cardSet.contains(board[r][(c)])){
return false;
}else{
if(board[r][c] != '.'){
cardSet.add(board[r][c]);
}
}
}
}
return true;
}
}