python实现 LeetCode37——Sudoku Solver
2018-03-28 16:55
483 查看
数独游戏,用了dfs的深度优先树。
25行和26行的else将该位置改为点,是在一次dfs中的,相当于在for循环中不断尝试c值中的赋值。
如果所有的c值都不对的时候会进入27行的return false,然后再进入23行的赋值。class Solution(object):
def solveSudoku(self, board):
def isvaild(i,j):
for m in range(9):
if m!=i and board[m][j]==board[i][j]:
return False
for n in range(9):
if n!=j and board[i]
==board[i][j]:
return False
for m in range(i/3*3,i/3*3+3):
for n in range(j/3*3,j/3*3+3):
if m!=i and n!=j and board[m]
==board[i][j]:
return False
return True
for i in range(9):
for j in range(9):
if board[i][j]=='.':
for c in '123456789':
board[i][j]=c
if isvaild(i,j):
if self.solveSudoku(board):
return True
else:
board[i][j] = '.'
else:
board[i][j] = '.'
return False
return True
25行和26行的else将该位置改为点,是在一次dfs中的,相当于在for循环中不断尝试c值中的赋值。
如果所有的c值都不对的时候会进入27行的return false,然后再进入23行的赋值。class Solution(object):
def solveSudoku(self, board):
def isvaild(i,j):
for m in range(9):
if m!=i and board[m][j]==board[i][j]:
return False
for n in range(9):
if n!=j and board[i]
==board[i][j]:
return False
for m in range(i/3*3,i/3*3+3):
for n in range(j/3*3,j/3*3+3):
if m!=i and n!=j and board[m]
==board[i][j]:
return False
return True
for i in range(9):
for j in range(9):
if board[i][j]=='.':
for c in '123456789':
board[i][j]=c
if isvaild(i,j):
if self.solveSudoku(board):
return True
else:
board[i][j] = '.'
else:
board[i][j] = '.'
return False
return True
相关文章推荐
- LeetCode 37 Sudoku Solver (C,C++,Java,Python)
- LeetCode 84 Largest Rectangle in Histogram (Python详解及实现)
- Leetcode: 在原矩阵上实现矩阵的旋转(Python)
- leetcode - 37.Sudoku Solver
- python实现 LeetCode36——Valid Sudoku
- LeetCode 70 Climbing Stairs--Python实现
- LeetCode 95 Unique Binary Search Tree II(Python详解及实现)
- leetcode 【 Reverse Words in a String 】python 实现
- 【Leetcode】【Python】9. Palindrome Number实现
- LeetCode 76. Minimum Window Substring--Python实现
- LeetCode 98 Validate Binary Search Tree(Python详解及实现)
- [LeetCode]3 Longest Substring Without Repeating Characters (C++,Python实现)
- leetcode_107. Binary Tree Level Order Traversal II 二叉树层次遍历,利用python的list特性实现队列功能
- leetcode 【 Minimum Path Sum 】python 实现
- LeetCode 61. Rotate List(Python详解及实现)
- python实现 LeetCode31——Next Permutation
- leetcode 37. Sudoku Solver
- LeetCode 55 Jump Game(Python 实现及详解)
- [leetcode 37]sudoku solver
- leetcode Rotate list (链表旋转)的python实现