判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。
數字1-9
在每一行只能出現一次。
數字1-9
在每一列只能出現一次。
數字1-9
在每乙個以粗實線分隔的3x3
宮內只能出現一次。
上圖是乙個部分填充的有效的數獨。
數獨部分空格內已填入了數字,空白格用'.'
表示。
說明:
這道題只是要求判斷是不是乙個有效的數獨,因此只需要按照數獨的條件判斷就行了。
數字 1-9 在每一行只能出現一次。
數字 1-9 在每一列只能出現一次。
數字 1-9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。
判斷是否出現過,結合集合set更加好判斷。
當判斷以粗實線分隔的 3x3 格仔的時候,由於數獨整體總是9*9的,而實現分割的各個部分又是固定的,因此
可以每個3*3的格仔對應乙個set集合。對於每個點的橫縱座標都整除以3這樣就乙個的3*3格仔都對應了乙個
元素。 res[i//3][j//3],在res是乙個3*3的列表,每乙個元素是乙個set,對應乙個3*3格仔。
/:返回的是浮點數結果
//:整除,返回的是整數,數值上就是除法/結果的整數部分
python中的!不能用於 !true之類的,只能作為數值比較中的不等號,要對布林型變數取非的話需要用not,即not true 這類的才可以。
class solution:
def check_row(self,board): # 檢查行
for i in range(9):
map_c = set()
for j in range(9):
if board[i][j] == '.':
continue
elif board[i][j] not in map_c:
map_c.add(board[i][j])
elif board[i][j] in map_c:
return false
return true
def check_col(self,board): # 檢查列
for j in range(9):
map_c = set()
for i in range(9):
if board[i][j] == '.':
continue
elif board[i][j] not in map_c:
map_c.add(board[i][j])
elif board[i][j] in map_c:
return false
return true
def check_nine(self,board): # 檢查每個以粗實線分隔的 3x3 格仔
res=
for i in range(3):
for i in range(3):
for j in range(3):
for i in range(9):
for j in range(9):
if board[i][j] == '.':
continue
elif board[i][j] not in res[i//3][j//3]:
res[i//3][j//3].add(board[i][j])
elif board[i][j] in res[i//3][j//3]:
return false
return true
def isvalidsudoku(self, board: list[list[str]]) -> bool:
if not self.check_row(board):
return false
if not self.check_col(board):
return false
if not self.check_nine(board):
return false
return true
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...