[LintCode 389] 判断数独是否合法(Python)

来源:互联网 发布:手机摄像头透视软件 编辑:程序博客网 时间:2024/05/16 19:26

题目描述

请判定一个数独是否有效。
该数独可能只填充了部分数字,其中缺少的数字用 . 表示。

样例
这里写图片描述

输入
每行一个参数:
[“.87654321”,”2……..”,”3……..”,”4……..”,”5……..”,”6……..”,”7……..”,”8……..”,”9……..”]

思路

按每行,每列,每块判断。没有过多的技巧,逻辑题。可以借助set结构判断是否有重复元素。

代码

class Solution:    """    @param: board: the board    @return: whether the Sudoku is valid    """    def isValidSudoku(self, board):        # write your code here        if board is None or len(board) != 9 or len(board[0]) != 9:            return None        s = set()        # 判断行和列        for i in range(9):            # 判断每行            for j in range(9):                if board[i][j] != '.' and board[i][j] in s:                    return False                else:                    s.add(board[i][j])            s.clear()            # 判断每列            for k in range(9):                if board[k][i] != '.' and board[k][i] in s:                    return False                else:                    s.add(board[k][i])            s.clear()        # 判断每块        for i in range(0, 9, 3):            for j in range(0, 9, 3):                for k in range(i, i + 3):                    for p in range(j, j + 3):                        if board[k][p] != '.' and board[k][p] in s:                            return False                        else:                            s.add(board[k][p])                s.clear()        return True

时间复杂度

时间复杂度O(1),空间复杂度O(1)