Skip to content

Commit 30a471a

Browse files
committedDec 3, 2020
feat: valid-sudoku
1 parent 12fec2f commit 30a471a

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed
 

‎dfs.valid-sudoku.py

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
"""
6+
36. 有效的数独
7+
https://leetcode-cn.com/problems/valid-sudoku
8+
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
9+
1. 数字 1-9 在每一行只能出现一次。
10+
2. 数字 1-9 在每一列只能出现一次。
11+
3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
12+
"""
13+
def isValidSudoku(self, board: List[List[str]]) -> bool:
14+
# 判断行是否满足
15+
# 判断列是否满足
16+
col_sets = [set() for _ in range(9)]
17+
row_sets = [set() for _ in range(9)]
18+
block_sets = [set() for _ in range(9)]
19+
20+
for i in range(9):
21+
for j in range(9):
22+
if board[i][j] == '.':
23+
continue
24+
25+
if board[i][j] in row_sets[i]:
26+
return False
27+
28+
if board[i][j] in col_sets[j]:
29+
return False
30+
31+
if board[i][j] in block_sets[(i // 3) * 3 + j // 3]:
32+
return False
33+
34+
row_sets[i].add(board[i][j])
35+
col_sets[j].add(board[i][j])
36+
block_sets[(i // 3) * 3 + j // 3].add(board[i][j])
37+
38+
return True
39+
40+
41+
so = Solution()
42+
# True
43+
print(so.isValidSudoku([
44+
["5","3",".",".","7",".",".",".","."],
45+
["6",".",".","1","9","5",".",".","."],
46+
[".","9","8",".",".",".",".","6","."],
47+
["8",".",".",".","6",".",".",".","3"],
48+
["4",".",".","8",".","3",".",".","1"],
49+
["7",".",".",".","2",".",".",".","6"],
50+
[".","6",".",".",".",".","2","8","."],
51+
[".",".",".","4","1","9",".",".","5"],
52+
[".",".",".",".","8",".",".","7","9"]
53+
]))
54+
55+
# False
56+
print(so.isValidSudoku([
57+
["8","3",".",".","7",".",".",".","."],
58+
["6",".",".","1","9","5",".",".","."],
59+
[".","9","8",".",".",".",".","6","."],
60+
["8",".",".",".","6",".",".",".","3"],
61+
["4",".",".","8",".","3",".",".","1"],
62+
["7",".",".",".","2",".",".",".","6"],
63+
[".","6",".",".",".",".","2","8","."],
64+
[".",".",".","4","1","9",".",".","5"],
65+
[".",".",".",".","8",".",".","7","9"]
66+
]))

0 commit comments

Comments
 (0)
Please sign in to comment.