利用二重迴圈的下標來表示行、列和小正方形,減少不必要的資料儲存,每一次內迴圈都代表著對一行或是一列或是乙個小正方形的遍歷。外迴圈則代表對下一行,下一列和下乙個小正方形的遍歷。判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。
數字1-9
在每一行只能出現一次。
數字1-9
在每一列只能出現一次。
數字1-9
在每乙個以粗實線分隔的3x3
宮內只能出現一次。
上圖是乙個部分填充的有效的數獨。
數獨部分空格內已填入了數字,空白格用'.'
表示。
**:注意字典的鍵值對輸入:
[ ["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
參考:class solution:
def isvalidsudoku(self, board):
""":type board: list[list[str]]
:rtype: bool
"""row = [{},{},{},{},{},{},{},{},{}] # 值:1
col = [{},{},{},{},{},{},{},{},{}]
cell = [{},{},{},{},{},{},{},{},{}]
n = len(board)
for i in range(n):
for j in range(n):
block = 3*(i//3)+j//3 # 找單元
num = board[i][j]
if num != '.':
if num not in row[i] and num not in col[j] and num not in cell[block]:
row[i][num] = 1
col[j][num] = 1
cell[block][num] = 1
else:
return false
# print(row)
# [, ,
# , ,
# , ,
# , ,
# ]return true
leetcode 36 vaild soduku(有效的數獨) python3 最簡**(單次迴圈)
leetcode 36. 有效的數獨 (python)
LeetCode 36 有效的數獨
題目鏈結 題目描述 判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字...
LeetCode 36 有效的數獨
public boolean isvalidsudoku char board 檢查行 if isparticallyvalid board,i,i,0,8 檢查塊 for int i 0 i 3 i return true 把要檢查的值存入到set中,每次向set中新增值的時候,如果失敗則證明該值...
leetcode36 有效的數獨
判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。數獨部分空格內已填入了數字,空白格用 表示。示例 1 輸入 5 3 7 6 1...