leetcode--37. ぶんすう独
1585 ワード
テーマ:leetcode-37.ぶんすう独
リンク:https://leetcode-cn.com/problems/sudoku-solver/description/
解数独,初期残局用"."空白を表す.以前大学院を受ける時C言語のを書いたことがあって、再帰的に解きます.実参に基づいて変更し、結果を返さないでください.そうすればDFSに戻り値を付けて判断すればいいのですが、解が見つかったらTrueに戻り、遡及しません.
python:
リンク:https://leetcode-cn.com/problems/sudoku-solver/description/
解数独,初期残局用"."空白を表す.以前大学院を受ける時C言語のを書いたことがあって、再帰的に解きます.実参に基づいて変更し、結果を返さないでください.そうすればDFSに戻り値を付けて判断すればいいのですが、解が見つかったらTrueに戻り、遡及しません.
python:
def isRowAndColValid(x, y, field, num):
for i in range(9):
if field[x][i] == str(num):
return False
for j in range(9):
if field[j][y] == str(num):
return False
return True
def isSquareValid(x, y, field, num):
row, col = (x // 3) * 3, (y // 3) * 3
for i in range(row, row + 3):
for j in range(col, col + 3):
if field[i][j] == str(num):
return False
return True
def getNext(field):
for x in range(9):
for y in range(9):
if field[x][y] == ".":
return [x, y]
return []
class Solution:
def solveSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: void Do not return anything, modify board in-place instead.
"""
def DFS(board):
next = getNext(board)
if not next:
# print(board)
return True
for i in range(1, 10):
if isRowAndColValid(next[0], next[1], board, i) and isSquareValid(next[0], next[1], board, i):
board[next[0]][next[1]] = str(i)
if DFS(board):
return True
board[next[0]][next[1]] = "."
DFS(board)