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.
Valid Sudoku
Check the coding in detail below:
/*Solution_1: => LeetCode Run Time: 628 ms
Key to Solve: HashSet
1. use HashSet.add to determine (return false if dulipcation was add
*/
public static boolean isValidSudoku(char[][] board) {
//check for columns
for(int i=0;i<board[0].length;i++){
HashSet<Character> set=new HashSet<Character>();
for(int j=0;j<board[0].length;j++){
if(board[j][i]!='.'){
if(!set.add(board[j][i])) return false;
}
}
}
//check for rows
for(int i=0;i<board.length;i++){
HashSet<Character> set=new HashSet<Character>();
for(int j=0;j<board.length;j++){
if(board[i][j]!='.'){
if(!set.add(board[i][j])) return false;
}
}
}
//check for sub-box of 3x3
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
HashSet<Character> set=new HashSet<Character>();
for(int n=i*3;n<i*3+3;n++){
for(int m=j*3;m<j*3+3;m++){
if(board[n][m]!='.'){
if(!set.add(board[n][m])) return false;
}
}
}
}
}
return true;
}
/*Solution_2 => LeetCode Run Time: 568 ms
Ket to solve boolean[256]
1.use boolean[] array to determine whether the element is duplicated
2. if boolean[]==true duplication was found
3. else set boolean[] to true when new number add
*/
public static boolean isValidSudokuBool(char[][] board) {
//check for columns
for(int i=0;i<board[0].length;i++){
boolean[] bool=new boolean[256];
for(int j=0;j<board.length;j++){
if(board[j][i]!='.'){
if(bool[board[j][i]]){ return false;}
else{ bool[board[j][i]]=true;}
}
}
}
//check for rows
for(int i=0;i<board.length;i++){
boolean[] bool=new boolean[256];
for(int j=0;j<board[0].length;j++){
if(board[i][j]!='.'){
if(bool[board[i][j]]){ return false; }
else {bool[board[i][j]]=true; }
}
}
}
//check for sub-box of 3x3
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
boolean[] bool=new boolean[256];
for(int n=i*3;n<i*3+3;n++){
for(int m=j*3;m<j*3+3;m++) {
if(board[n][m]!='.'){
if(bool[board[n][m]]) {return false;}
else {bool[board[n][m]]=true;}
}
}
}
}
}
return true;
}