判斷一個 9x9 的數(shù)獨是否有效逆皮。只需要根據(jù)以下規(guī)則,驗證已經(jīng)填入的數(shù)字是否有效即可参袱。
數(shù)字 1-9 在每一行只能出現(xiàn)一次电谣。
數(shù)字 1-9 在每一列只能出現(xiàn)一次。
數(shù)字 1-9 在每一個以粗實線分隔的 3x3 宮內(nèi)只能出現(xiàn)一次抹蚀。
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)),[])剿牺,一開始用這個,發(fā)現(xiàn)block_dic[key].append插入時环壤,每一個key對應的value都做了相同的插入操作晒来,應該是這9個初始的value[]都是同一個,實際上是9次引用而已郑现。改成下面這種后就用例通過了湃崩。
block_dic = {i:[] for i in range(9)}