leetcode: 36. Valid Sudoku

来源:互联网 发布:王侯将相宁有种乎出自 编辑:程序博客网 时间:2024/06/06 07:47

Q

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

这里写图片描述

Note:

A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

AC

class Solution(object):    def isValidSudoku(self, board):        """        :type board: List[List[str]]        :rtype: bool        """        for i in xrange(9):            if not self.isValidList([board[i][j] for j in xrange(9)]) or not self.isValidList([board[j][i] for j in xrange(9)]):                return False        for m in xrange(3):            for n in xrange(3):                if not self.isValidList([board[i][j] for i in xrange(3 * m, 3 * m + 3) for j in xrange(3 * n, 3 * n + 3)]):                    return False        return True    def isValidList(self, xs):        xs = filter(lambda x: x != '.', xs)        return len(set(xs)) == len(xs)class Solution2(object):    def isValidSudoku(self, board):        """        :type board: List[List[str]]        :rtype: bool        """        map_row = [{} for _ in xrange(9)]        map_col = [{} for _ in xrange(9)]        map_cell = [[{} for _ in xrange(3)] for __ in xrange(3)]        for i in xrange(9):            for j in xrange(9):                char = board[i][j]                if char == '.': continue                if char in map_row[i]: return False                else: map_row[i][char] = [i, j]                if char in map_col[j]: return False                else: map_col[j][char] = [i, j]                if char in map_cell[i / 3][j / 3]: return False                else: map_cell[i / 3][j / 3][char] = [i, j]        return Trueif __name__ == "__main__":    board = [[1, '.', '.', '.', '.', '.', '.', '.', '.'],             ['.', 2, '.', '.', '.', '.', '.', '.', '.'],             ['.', '.', 3, '.', '.', '.', '.', '.', '.'],             ['.', '.', '.', 4, '.', '.', '.', '.', '.'],             ['.', '.', '.', '.', 5, '.', '.', '.', '.'],             ['.', '.', '.', '.', '.', 6, '.', '.', '.'],             ['.', '.', '.', '.', '.', '.', 7, '.', '.'],             ['.', '.', '.', '.', '.', '.', '.', 8, '.'],             ['.', '.', '.', '.', '.', '.', '.', '.', 9]]    assert Solution().isValidSudoku(board)


原创粉丝点击