NO36.有效的字符

#暴力破解
# 数字 1-9 在每一行只能出现一次。
# 数字 1-9 在每一列只能出现一次。
# 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次
class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
#求每行列的个数可求不为3的情况
        col = len(board[0])
        row = len(board)
#判断每行有无相同的值
        for i in range(row):
            num_set = set() #构建集合,判断添加有无该值
            for j in range(col):
                if board[i][j].isnumeric()==False:
                    continue
                elif board[i][j] not in num_set:
                    num_set.add(board[i][j])
                else:
                    return False
#判断每行有无相同的值(很相似)
        for i in range(col):
            num_set = set() #构建集合,判断添加有无该值
            for j in range(row):
                if board[j][i].isnumeric()==False:
                    continue
                elif board[j][i] not in num_set:
                    num_set.add(board[j][i])
                else:
                    return False
#判断每一个粗实线有无相同的值,找规律发现为每3个一跳
        for i in range(0, row, 3):
            for j in range(0, col, 3):
                num_set = set()
                for x in range(i, i+3):
                    for y in range(j, j+3):
                        if board[x][y].isnumeric() == False:
                            continue
                        elif board[x][y] not in num_set:
                            num_set.add(board[x][y])
                        else:
                            return False     
#其他情况返回正确
        return True

 

 
posted @ 2022-07-18 15:50  是冰美式诶  阅读(42)  评论(0)    收藏  举报