defsolveSudoku(self, board): """ :type board: List[List[str]] :rtype: void Do not return anything, modify board in-place instead. """ defsolve(): for x in xrange(9): for y in xrange(9): if board[x][y] == '.': z = x / 3 * 3 + y / 3 available = row[x] & col[y] & grid[z] for i in available: board[x][y] = i row[x].remove(i) col[y].remove(i) grid[z].remove(i) if solve(): returnTrue board[x][y] = '.' row[x].add(i) col[y].add(i) grid[z].add(i) returnFalse returnTrue
row = defaultdict(lambda: set(str(x) for x in xrange(1, 10))) col = defaultdict(lambda: set(str(x) for x in xrange(1, 10))) grid = defaultdict(lambda: set(str(x) for x in xrange(1, 10))) for x in xrange(9): for y in xrange(9): if board[x][y] != '.': z = x / 3 * 3 + y / 3 row[x].remove(board[x][y]) col[y].remove(board[x][y]) grid[z].remove(board[x][y]) solve()