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...
I referred to this post to finally get my program running. One thing I did not do is to "return True/False", but handled it like permutation that kind of questions. I do think "return True/False" make sense, but I don't know why I did not think it necessary.
class Solution(object): def solveSudoku(self, board): """ :type board: List[List[str]] :rtype: void Do not return anything, modify board in-place instead. """ self.solve(board, 0, 0) def solve(self, board, i, j): def candidates(i, j): not_available = [] for x in range(9): if board[i][x] != '.': not_available.append(board[i][x]) if board[x][j] != '.': not_available.append(board[x][j]) grid_x, grid_y = i / 3, j / 3 for x in (0, 1, 2): for y in (0, 1, 2): if board[grid_x * 3 + x][grid_y * 3 + y] != '.': not_available.append(board[grid_x * 3 + x][grid_y * 3 + y]) return [i for i in '123456789' if i not in not_available] if i == 9: return True elif j == 9: return self.solve(board, i+1, 0) else: if board[i][j] == '.': cands = candidates(i, j) if not cands: return False for cand in cands: board[i][j] = cand if self.solve(board, i, j + 1): return True board[i][j] = '.' return False else: return self.solve(board, i, j+1)
No comments:
Post a Comment