leetcode_36. 有效的數獨
阿新 • • 發佈:2020-12-11
判斷一個9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字1-9在每一行只能出現一次。 數字1-9在每一列只能出現一次。 數字1-9在每一個以粗實線分隔的3x3宮內只能出現一次。 上圖是一個部分填充的有效的數獨。 數獨部分空格內已填入了數字,空白格用'.'表示。 示例1: 輸入: [ ["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"] ] 輸出: true 示例2: 輸入: [ ["8","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"] ] 輸出: false 解釋: 除了第一行的第一個數字從 5 改為 8 以外,空格內其他數字均與 示例1 相同。 但由於位於左上角的 3x3 宮內有兩個 8 存在, 因此這個數獨是無效的。 說明: 一個有效的數獨(部分已被填充)不一定是可解的。 只需要根據以上規則,驗證已經填入的數字是否有效即可。 給定數獨序列只包含數字1-9和字元'.'。 給定數獨永遠是9x9形式的。 來源:力扣(LeetCode) 連結:https://leetcode-cn.com/problems/valid-sudoku 著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
from typing import List class Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: def isvalid(ls:List)->bool: d=dict() for x in ls: if x!='.' and x in d: return False if x!='.' and x not in d: d[x]=1 return True #行 for x in board: if not isvalid(x): return False #列 for i in range(9): ls=[] for j in range(9): ls.append(board[j][i]) if not isvalid(ls): return False for i in range(0,9,3): for j in range(0,9,3): ls=[] for k in range(0,3): for l in range(0,3): ls.append(board[i+k][j+l]) if not isvalid(ls): return False return True