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.
public class Solution {
public boolean isValidSudoku(char[][] board) {
if(board==null) return false;
int row = board.length;
int col = row;
for(int i=0;i<row;i++){
//数组默认初始化为false,用hashset来判断是否已有这个数也行
boolean[] usedLine = new boolean[row];
for(int j=0;j<row;j++){
if(board[i][j]=='.'){
continue;
}else if(board[i][j]!='.'&&usedLine[board[i][j]-'1']==false){
usedLine[board[i][j]-'1']=true;
}else{
return false;
}
}
}
for(int i=0;i<row;i++){
//数组默认初始化为false
boolean[] usedLine = new boolean[row];
for(int j=0;j<row;j++){
if(board[j][i]=='.'){
continue;
}else if(board[j][i]!='.'&&usedLine[board[j][i]-'1']==false){
usedLine[board[j][i]-'1']=true;
}else{
return false;
}
}
}
for(int i=0;i<row;i=i+3){
for(int j=0;j<row;j=j+3){
boolean[] usedLine = new boolean[row];
for(int m=0;m<row/3;m++){
for(int n=0;n<row/3;n++){
if(board[i+m][j+n]=='.'){
continue;
}else if(board[i+m][j+n]!='.'&&usedLine[board[i+m][j+n]-'1']==false){
usedLine[board[i+m][j+n]-'1']=true;
}else{
return false;
}
}
}
}
}
return true;
}
}
2层for循环参考博客:
http://www.tuicool.com/articles/zMn2ei