class Solution:
def solveSudoku(self, board: List[List[str]]) -> None:
"""
Do not return anything, modify board in-place instead.
"""
m = len(board)
n = len(board[0])
def backtrack(board,i,j):
if j == n:
# 穷举到最后一列,换下一行重新开始
return backtrack(board,i+1,0)
if i == m:
# base case
# 找到一个可行解,返回
return True
if(board[i][j]!='.'):
# 有数字的不管
return backtrack(board,i,j+1)
# 填写1-9中的任意数字
for ch in range(1,10):
if isValid(board,i,j,str(ch)) == False:
# 不满足条件,下一个
continue
board[i][j]=str(ch)
if backtrack(board,i,j+1)==True:
return True
board[i][j] = '.'
return False
def isValid(board,r,c,ch):
for i in range(0,9):
# 判断同行是否一样
# print(r,c,i)
if board[r][i]==ch:
return False
# 判断同列是否存在一样的数字
if board[i][c]==ch:
return False
if board[(r//3)*3+i//3][(c//3)*3+i%3]==ch:
return False
return True
backtrack(board,0,0)
每日一道Leetcode -37. 解数独 【回溯】
最新推荐文章于 2024-09-26 19:15:00 发布