0036 - Valid Sudoku
Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
Each row must contain the digits 1-9 without repetition.
Each column must contain the digits 1-9 without repetition.
Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.
Note:
A Sudoku board (partially filled) could be valid but is not necessarily solvable.
Only the filled cells need to be validated according to the mentioned rules.
Examples
Input: board =
[["5","3",".",".","7",".",".",".","."]
,["6",".",".","1","9","5",".",".","."]
,[".","9","8",".",".",".",".","6","."]
,["8",".",".",".","6",".",".",".","3"]
,["4",".",".","8",".","3",".",".","1"]
,["7",".",".",".","2",".",".",".","6"]
,[".","6",".",".",".",".","2","8","."]
,[".",".",".","4","1","9",".",".","5"]
,[".",".",".",".","8",".",".","7","9"]] Output: true
Input: board =
[["8","3",".",".","7",".",".",".","."]
,["6",".",".","1","9","5",".",".","."]
,[".","9","8",".",".",".",".","6","."]
,["8",".",".",".","6",".",".",".","3"]
,["4",".",".","8",".","3",".",".","1"]
,["7",".",".",".","2",".",".",".","6"]
,[".","6",".",".",".",".","2","8","."]
,[".",".",".","4","1","9",".",".","5"]
,[".",".",".",".","8",".",".","7","9"]]
Output: false Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.
Constraints
board.length == 9 board[i].length == 9 board[i][j] is a digit 1-9 or '.'.
Java Solution
class Solution {
public boolean isValidSudoku(char[][] board) {
int maxSize = 9;
HashSet<Character>[] rows = new HashSet[maxSize];
HashSet<Character>[] columns = new HashSet[maxSize];
HashSet<Character>[] squares = new HashSet[maxSize];
for(int i = 0; i < maxSize; i++) {
rows[i] = new HashSet<Character>();
columns[i] = new HashSet<Character>();
squares[i] = new HashSet<Character>();
}
for(int row = 0; row < maxSize; row++) {
for(int column = 0; column < maxSize; column++) {
char value = board[row][column];
if(value == '.') continue;
if(rows[row].contains(value)) return false;
rows[row].add(value);
if(columns[column].contains(value)) return false;
columns[column].add(value);
int square =(row/3) * 3 + column / 3;
if(squares[square].contains(value)) return false;
squares[square].add(value);
}
}
return true;
}
}
Last updated