Skip to main content

Valid Sudoku

LeetCode 36 | Difficulty: Medium​

Medium

Problem 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-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.

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 digit `1-9` or `'.'`.

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?

When to use

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.

When to use

Grid traversal, island problems, path finding, rotating/transforming matrices.


Solutions​

Solution 1: C# (Best: 202 ms)​

MetricValue
Runtime202 ms
MemoryN/A
Date2017-10-16
Solution
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​

ApproachTimeSpace
Hash Map$O(n)$$O(n)$

Interview Tips​

Key Points
  • 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.