描述

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

  1. 数字 1-9 在每一行只能出现一次。
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

Python

分别判断行列和方阵中的数字是否符合要求

class Solution:
    def isValidSudoku(self, board):
        """
        :type board: List[List[str]]
        :rtype: bool
        """
        return self.isRowValid(board) and self.isColValid(board) and self.isSquareValid(board)
    
    def isListValid(self,lst):
        tmp = [i for i in lst if i != '.']
        return len(set(tmp))==len(tmp)
    
    def isRowValid(self,board):
        for row in board:
            if not self.isListValid(row):
                return False
        return True
    
    def isColValid(self,board):
        for col in zip(*board):
            if not self.isListValid(col):
                return False
        return True
    
    def isSquareValid(self,board):
        for i in [0,3,6]:
            for j in [0,3,6]:
                tmp = [board[x][y] for x in range(i,i+3) for y in range(j,j+3)]
                if not self.isListValid(tmp):
                    return False
        return True