36. Valid Sudoku
Description
Determine if a 9x9 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 9
3x3
sub-boxes of the grid must contain the digits1-9
without repetition.

The Sudoku board could be partially filled, where empty cells are filled with the character '.'
.
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.
Constraints
The given board contain only digits
1-9
and the character'.'
The given board size is always
9x9
.
Approach
Links
ProgramCreek
YouTube
Examples
Input:
[
["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
Solutions
/**
* Time complexity : O(n*n)
* Space complexity : O(n*n)
*/
class Solution {
private static final int SIZE = 9;
public boolean isValidSudoku(char[][] board) {
Set<String> seen = new HashSet<>();
for(int i = 0; i < SIZE; i++) {
for(int j = 0; j < SIZE; j++) {
char ch = board[i][j];
if(ch != '.') {
if(!seen.add(ch + "-r-" + i) ||
!seen.add(ch + "-c-" + j) ||
!seen.add(ch + "-b-" + i/3 + "-" + j/3)) {
return false;
}
}
}
}
return true;
}
}
Follow up
Last updated
Was this helpful?