1. 暴力循环
import numpy as np
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
for i in range(9):
if len(list(set(board[i][:])))<9-board[i][:].count('.')+1:
print(i)
return False
board1=np.array(board)
for j in range(9):
if len(list(set(board1[:,j])))<9-list(board1[:,j]).count('.')+1:####要np.array才行
print(j)
return False
arr=[]
for i in range(0,9,3):
for j in range(0,9,3):
line=board[j][i:i+3]+board[j+1][i:i+3]+board[j+2][i:i+3]
print(line)
arr.append(line)
for i in range(9):
if len(list(set(arr[i][:])))<9-arr[i][:].count('.')+1:
print(i)
return False
return True
方法二:使用set,if in set return false else set.add()
class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
dic_list1 = [set() for _ in range(9)]
dic_list2 = [set() for _ in range(9)]
dic_list3 = [[set() for _ in range(3)] for _ in range(3)]
for i in range(9):
for j in range(9):
if not board[i][j].isnumeric():
continue
y = i // 3
x = j // 3
num = board[i][j]
if (num in dic_list1[i]) or (num in dic_list2[j]) or (num in dic_list3[x][y]):
return False
else:
dic_list1[i].add(num)
dic_list2[j].add(num)
dic_list3[x][y].add(num)
return True