mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
57 lines
2.2 KiB
Plaintext
57 lines
2.2 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"
|
||
|
|
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
|
||
|
|
```
|