0
点赞
收藏
分享

微信扫一扫

147. Leetcode 37. 解数独 (回溯算法-棋盘问题)

class Solution:
    def solveSudoku(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        def isValid(board, row, col, value):
            # 判断行
            for i in range(9):
                if board[i][col] == value:
                    return False

            # 判断列
            for j in range(9):
                if board[row][j] == value:
                    return False 

            # 判断小格子
            start_i = (row//3) * 3
            start_j = (col//3) * 3
            for i in range(start_i, start_i + 3):
                for j in range(start_j, start_j + 3):
                    if board[i][j] == value:
                        return False

            return True

        def dfs(board):
            for i in range(len(board)):
                for j in range(len(board[0])):
                    if board[i][j] != ".":
                        continue
                    for value in range(1,10):
                        if isValid(board, i, j, str(value)):
                            board[i][j] = str(value)
                            if dfs(board):
                                return True
                            board[i][j] = '.'

                    return False

            return True

        dfs(board)

 

 

举报

相关推荐

0 条评论