有效的数独

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容