判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
class Solution:
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
col_dic={i:[] for i in range(9)}
block_dic = {i:[] for i in range(9)}
#print(block_dic)
for ix in range(9):
row_dic={}
for ij in range(9):
num = board[ix][ij]
if num == ".":
continue
elif int(num) in row_dic or int(num) in col_dic[ij]:
return False
else:
int_num=int(num)
block_row = ix//3
block_col = ij//3
block_id = 3*block_row+block_col;print(block_id)
if int_num in block_dic[block_id]:
return False
else:
block_dic[block_id].append(int_num);#print(block_dic)
row_dic[int_num]=1;#print(row_dic[int_num])
col_dic[ij].append(int_num);#print(col_dic[ij])
return True
【注意】
block_dic = dict.fromkeys(list(range(9)),[]),一开始用这个,发现block_dic[key].append插入时,每一个key对应的value都做了相同的插入操作,应该是这9个初始的value[]都是同一个,实际上是9次引用而已。改成下面这种后就用例通过了。
block_dic = {i:[] for i in range(9)}