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.
题解:验证矩阵的每一行是否有重复元素,每一列是否有重复元素,每一3X3的小矩形是否有重复元素,用visited数组来保存是已经存在的元素。
code:
public boolean isValidSudoku(char[][] board) {
boolean[] visited = new boolean[9];
//用来遍历每一行
for(int i=0; i<9; i++){
Arrays.fill(visited, false);
for(int j=0; j<9; j++){
if(!process(visited, board[i][j])){
return false;
}
}
}
//用来遍历每一列
for(int i=0; i<9; i++){
Arrays.fill(visited, false);
for(int j=0; j<9;j++){
if(!process(visited,board[j][i])){
return false;
}
}
}
//遍历小矩阵
for(int i=0; i<9; i+=3){
for(int j=0; j<9; j+=3){
Arrays.fill(visited, false);
for(int k=0; k<9; k++){
if(!process(visited, board[i+k/3][j+k%3])){
return false;
}
}
}
}
return true;
}
//判断是否为.和元素是否已经访问
public boolean process(boolean [] visited,char digit){
if(digit=='.'){
return true;
}
int num = digit - '0';
if(num< 1 || num>9 || visited[num-1]){
return false;
}
visited[num-1] = true;
return true;
}
参考: http://www.jiuzhang.com/solutions/valid-sudoku/