题目描述
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’.’.
解析:该题目默认我们是知道什么叫数独的(数独的规则是:每一行都不能重复,每一列都不能重复,9X9的单元格内不能重复),如此说来,我们只需要检验三件事:
1.检验行是否有重复;
2.检验列是否有重复;
3.检验9x9的块是否有重复
import java.util.HashSet;
import java.util.Set;
public class Solution {
public boolean isValidSudoku(char[][] board) {
if(board.length<9||board[0].length<9){
return false;
}
Set<Character> row = new HashSet<>();//存取一行
Set<Character> col = new HashSet<>();//存取一列
for(int i=0;i<board.length;i++){
row.clear();
col.clear();
for(int j=0;j<board[0].length;j++){
if(i%3==0&&j%3==0){//检验块
if(!checkBlock(board,i,j)){//不满足条件
return false;
}
}
if(board[i][j]!='.'){//检验行
if(row.contains(board[i][j])){
return false;
}else {
row.add(board[i][j]);
}
}
if(board[j][i]!='.'){//检验列
if(col.contains(board[j][i])){
return false;
}else {
col.add(board[j][i]);
}
}
}
}
return true;
}
public boolean checkBlock(char [][]board,int row,int col){//检验块
Set<Character> set =new HashSet<>();
for(int i=row;i<row+3;i++){
for(int j=col;j<col+3;j++){
if(board[i][j]!='.'){//不是.就开始检验
if(set.contains(board[i][j])){
return false;
}else {
set.add(board[i][j]);
}
}
}
}
return true;
}
}