有效的数独

判断一个 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)}

你可能感兴趣的:(有效的数独)