Files
leetcode/apps/docs/content/(02-nodal-grid)/matrix-index-math/36_valid-sudoku.mdx
T

66 lines
2.7 KiB
Plaintext

---
title: '36. Valid Sudoku'
description: 'Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:'
icon: dot
topics:
- { name: "Array", slug: "array" }
- { name: "Hash Table", slug: "hash-table" }
- { name: "Matrix", slug: "matrix" }
issue: "https://github.com/prdlk/leetcode/issues/94"
companies:
- { name: "Amazon", period: "Thirty Days", frequency: 48.9 }
- { name: "Apple", period: "Three Months", frequency: 69 }
- { name: "Bloomberg", period: "Three Months", frequency: 36.8 }
- { name: "Google", period: "Three Months", frequency: 23.9 }
- { name: "Confluent", period: "Six Months", frequency: 100 }
- { name: "Meta", period: "Six Months", frequency: 32.7 }
- { name: "Microsoft", period: "Six Months", frequency: 32 }
sidebar:
label: 'Valid Sudoku'
badge: 'Medium'
---
### 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 '.'.
## Solution
```py
import collections
class Solution:
def isValidSudoku(self, board: list[list[str]]) -> bool:
cols = collections.defaultdict(set)
rows = collections.defaultdict(set)
squares = collections.defaultdict(set) # (r/3, c/3)
for r in range(9):
for c in range(9):
if board[r][c] == ".":
continue
if (
board[r][c] in rows[r]
or board[r][c] in cols[c]
or board[r][c] in squares[(r // 3, c // 3)]
):
return False
cols[c].add(board[r][c])
rows[r].add(board[r][c])
squares[(r // 3, c // 3)].add(board[r][c])
return True
```