6.23 - hard - 7

37. Sudoku Solver

這題是一道backtracking的題,難點在于backtracking進入下一層之前要做的事情,和退出下一層后要做的事情。

class Solution(object):
    def solveSudoku(self, board):
        """
        :type board: List[List[str]]
        :rtype: void Do not return anything, modify board in-place instead.
        """
        self.found = False
        self.dfs(board, 0, 0)
        print self.found
  
    def dfs(self, board, i, j):
        if j == 9:
            self.found = True
            return
        if board[i][j] == '.':
            for number in list("123456789"):
                if self.valid(board, i, j, number):
                    board[i][j] = number
                    if i == 8:
                        self.dfs(board, 0, j+1)
                    else:
                        self.dfs(board, i+1, j)
            if not self.found:
                board[i][j] = "."
        else:
            if i == 8:
                self.dfs(board, 0, j+1)
            else:
                self.dfs(board, i+1, j)
            
    def valid(self, board, row, col, number):
        # row
        if number in board[row]:
            return False
        
        # col
        for i in range(len(board)):
            if board[i][col] == number:
                return False
        
        start_row = row / 3 * 3
        start_col = col / 3 * 3
        for i in range(3):
            for j in range(3):
                if board[start_row+i][start_col+j] == number:
                    return False
        
        return True
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容