题目:
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.
解法:
数独的规则就是横着是1-9,竖着也是1-9,每个子栅格中还是1-9,那么我们要检查一个没填满的数独是否合法(注意不是可解),只需要检查每一行,每一列以及每个子栅格就行了,用HashSet存储已经遍历过的元素。
import java.util.HashSet;
public class No35_ValidSudoku {
public static void main(String[] args){
}
public static boolean isValidSudoku(char[][] board) {
for(int i=0;i<board.length;i++){
HashSet<Character> set = new HashSet<Character>();
for(int j=0;j<board[i].length;j++){
if(board[i][j] == '.')
continue;
if(set.contains(board[i][j]))
return false;
set.add(board[i][j]);
}
}
for(int j=0;j<board[0].length;j++){
HashSet<Character> set = new HashSet<Character>();
for(int i=0;i<board.length;i++){
if(board[i][j] == '.')
continue;
if(set.contains(board[i][j]))
return false;
set.add(board[i][j]);
}
}
for(int i=0;i<board.length;i+=3){
for(int j=0;j<board[i].length;j+=3){
HashSet<Character> set = new HashSet<Character>();
for(int p=i;p<i+3;p++){
for(int q=j;q<j+3;q++){
if(board[p][q] == '.')
continue;
if(set.contains(board[p][q]))
return false;
set.add(board[p][q]);
}
}
}
}
return true;
}
}