Valid Sudoku
LeetCode 36 | Difficulty: Mediumβ
MediumProblem Descriptionβ
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-9without repetition. -
Each column must contain the digits
1-9without repetition. -
Each of the nine
3 x 3sub-boxes of the grid must contain the digits1-9without 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.
Example 1:
![]()
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
Example 2:
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 digit1-9or'.'.
Topics: Array, Hash Table, Matrix
Approachβ
Hash Mapβ
Use a hash map for O(1) average lookups. Store seen values, frequencies, or indices. The key question: what should I store as key, and what as value?
Need fast lookups, counting frequencies, finding complements/pairs.
Matrixβ
Treat the matrix as a 2D grid. Common techniques: directional arrays (dx, dy) for movement, BFS/DFS for connected regions, in-place marking for visited cells, boundary traversal for spiral patterns.
Grid traversal, island problems, path finding, rotating/transforming matrices.
Solutionsβ
Solution 1: C# (Best: 202 ms)β
| Metric | Value |
|---|---|
| Runtime | 202 ms |
| Memory | N/A |
| Date | 2017-10-16 |
public class Solution {
public bool IsValidSudoku(char[,] board) {
for (int i = 0; i < board.GetLength(0); i++)
{
var row = new List<char>();
var col = new List<char>();
var cube = new List<char>();
for (int j = 0; j < board.GetLength(1); j++)
{
if (board[i, j] != '.')
{
if (!row.Contains(board[i, j]))
{
row.Add(board[i, j]);
}
else
{
return false;
}
}
if (board[j, i] != '.')
{
if (!col.Contains(board[j, i]))
{
col.Add(board[j, i]);
}
else
{
return false;
}
}
int rowIndex = 3 * (i / 3);
int colIndex = 3 * (i % 3);
if (board[rowIndex + j / 3, colIndex + j % 3] != '.')
{
if (!cube.Contains(board[rowIndex + j / 3, colIndex + j % 3]))
{
cube.Add(board[rowIndex + j / 3, colIndex + j % 3]);
}
else
{
return false;
}
}
}
}
return true;
}
}
Complexity Analysisβ
| Approach | Time | Space |
|---|---|---|
| Hash Map |
Interview Tipsβ
- Discuss the brute force approach first, then optimize. Explain your thought process.
- Hash map gives O(1) lookup β think about what to use as key vs value.