您的位置:首页 > 其它

[TODO]LeetCode 37. Sudoku Solver

2016-11-15 22:47 330 查看

Problem Statement

(Source) 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.

Tags:
Backtracking
,
Hash Table
.

Solution

class Solution(object):
def solveSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: void Do not return anything, modify board in-place instead.
"""
self.bt(board, 0, 0)

def bt(self, board, i, j):
m, n = len(board), len(board[0])
if i == m - 1 and j == n - 1:
return True
for x in xrange(i, m):
for y in xrange(n):
if x == i and y < j:
continue
if board[x][y] == '.':
for v in xrange(1, 10):
board[x][y] = str(v)
if self.check(board, x, y) and self.bt(board, x, y):
return True
board[x][y] == '.'
return False

def check(self, board, i, j):
"""Check whether the newly setted value at (i, j) satisfy all
constraints.

:type board: List[List[str]]
"""
m, n = len(board), len(board[0])
for y in xrange(n):
if y != j and board[i][y] == board[i][j]:
return False
for x in xrange(m):
if x != i and board[x][j] == board[i][j]:
return False
a, b = (i // 3) * 3, (j // 3) * 3
for x in xrange(a, a + 3):
for y in xrange(b, b + 3):
if (x != i or y != j) and board[x][y] == board[i][j]:
return False
return True
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: