Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character '.'
.
You may assume that there will be only one unique solution.
.
A sudoku puzzle.
...and its solution numbers marked in red.
解题思路:
本题是求解一个数独,假设只有唯一解。对9*9的方格逐个遍历:
1.若格子中有数据则继续判断下一个格子。
2.若格子中没有数字,则逐次放入【1,9】之间的每个数字,然后检查是否满足数独的规则,若满足则继续遍历,若不满足则将该格子置为空,继续尝试别的数字。直至放入一个数字满足数独规则后继续下一个格子,依次重复该步骤。
Python Code
class Solution(object): # 运行时长442ms
def solveSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: void Do not return anything, modify board in-place instead.
"""
for row in range(9):
board[row] = list(board[row])
print(board)
self.dfs(board)
def isValid(self,x, y, board):
tmp = board[x][y]
#board[x][y] = '.'
for i in range(9):
if board[i][y] == tmp:
return False
for i in range(9):
if board[x][i] == tmp:
return False
for i in range(3):
for j in range(3):
if board[(x//3)*3+i][(y//3)*3+j] == tmp:
return False
board[x][y] = tmp
return True
def dfs(self,board):
for i in range(9):
for j in range(9):
#print(board[i][j])
if board[i][j] == '.' :
for k in range(1, 10):
board[i][j] = str(k)
if self.isValid(i,j, board) and self.dfs(board):
return True
board[i][j] = '.'
return False
#print(board)
return True
if __name__ == "__main__":
board = ["..9748...","7........",".2.1.9...","..7...24.",".64.1.59.",".98...3..","...8.3.2.","........6","...2759.."]
s =Solution1()
s.solveSudoku(board)