有效的数独
初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
- 数字
1-9在每一行只能出现一次。 - 数字
1-9在每一列只能出现一次。 - 数字
1-9在每一个以粗实线分隔的3x3宫内只能出现一次
输入: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"]]
输出:false
解释:除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。 但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。
使用哈希表:
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
row = [[0]*10 for _ in range(9)]
colums = [[0]*10 for _ in range(9)]
boxs = [[0]*10 for _ in range(9)]
num = 0
for i in range(9):
for j in range(9):
num = board[i][j]
if num == '.':
continue
num = int(num)
if row[i][num] ==1 or colums[j][num] ==1 or boxs[j//3+(i//3)*3][num]==1:
return False
else:
row[i][num] =1
colums[j][num] =1
boxs[j//3+(i//3)*3][num]=1
return True

方法二:分别对行、列、小盒子进行遍历:
class Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: for i in range(9): stor = [] for j in range(9): if board[i][j] == '.': continue if board[i][j] in stor: return False else: stor.append(board[i][j]) for i in range(0,9): stor = [] for j in range(0,9): if board[j][i] =='.': continue if board[j][i] in stor: return False else: stor.append(board[j][i]) for i in range(0,9,3): for j in range(0,9,3): stor = [] for x in range(i,i+3): for y in range(j,j+3): if board[x][y] == '.': continue if board[x][y] in stor: return False else: stor.append(board[x][y]) return True

浙公网安备 33010602011771号