https://leetcode-cn.com/problems/valid-sudoku/

# -*- coding:utf-8 -*-
class Solution(object):
    def isValidSudoku(self, board):
        """
        :type board: List[List[str]]
        :rtype: bool
        """
        # 检查横排
        for i in range(9):
            flag = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
            for j in range(9):
                if board[i][j] is not '.':
                    if board[i][j] in flag:
                        flag.remove(board[i][j])
                    else:
                        return False
        # 检查竖排
        for i in range(9):
            flag = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
            for j in range(9):
                if board[j][i] is not '.':
                    if board[j][i] in flag:
                        flag.remove(board[j][i])
                    else:
                        return False
        # 检查3*3
        for i in range(0, 9, 3):
            for j in range(0, 9, 3):
                flag = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
                for x in range(i, i + 3):
                    for y in range(j, j + 3):
                        if board[x][y] is not '.':
                            if board[x][y] in flag:
                                flag.remove(board[x][y])
                            else:
                                return False
        return True
if __name__ == '__main__':
    board = [["5", "3", ".", ".", "7", ".", ".", ".", "."], ["6", ".", ".", "1", "9", "5", ".", ".", "."],
             [".", "9", "8", ".", ".", ".", ".", "6", "."], ["8", ".", ".", ".", "6", ".", ".", ".", "3"],
             ["4", ".", ".", "8", ".", "3", ".", ".", "1"], ["7", ".", ".", ".", "2", ".", ".", ".", "6"],
             [".", "6", ".", ".", ".", ".", "2", "8", "."], [".", ".", ".", "4", "1", "9", ".", ".", "5"],
             [".", ".", ".", ".", "8", ".", ".", "7", "9"]]
    print(Solution().isValidSudoku(board))

思路:查,就硬查,查三次。

依次遍历横排、竖排。如果出现就将flag中对应数字删去,如果不为空并且flag中没有则判为重复出现返回Flase。

分类: 算法

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注