乙個檢驗數獨的方法。
數獨以9*9的巢狀列表描述。
規則:每行每列以及每乙個以粗實線分隔的 3x3 宮內數字不能重複
class
solution
:def
isvalidsudoku
(self, board: list[list[
str]])
->
bool
: new=
;l=[
]for i in board:
#對行的檢驗
i=[x for x in i if x!=
'.']
iflen
(set
(i))
!=len
(i):
return
false
for i in
range(9
):for j in
range(9
):[i]):]
) l.clear(
)for i in new:
#對列的檢驗
i=[x for x in i if x!=
'.']
iflen
(set
(i))
!=len
(i):
return
false
new.clear(
)for i in
range(0
,9,3
):for j in
range(0
,9,3
):for k in
range(3
):for v in
range(3
):[i+v]):
])l.clear(
)for i in new:
#對小方格的檢驗
i=[x for x in i if x!=
'.']
iflen
(set
(i))
!=len
(i):
return
false
return
true
執行用時 :136 ms, 在所有 python3 提交中擊敗了53.09%的使用者分為三步,第一步檢驗行,第二步,轉換列表然後檢驗,第三步,得到小方格然後檢驗。
有優化空間,沒必要得到完整列表再檢驗。
class
solution
:def
isvalidsudoku
(self, board: list[list[
str]])
->
bool
: new=
;l=[
]for i in board:
#對行的檢驗
i=[x for x in i if x!=
'.']
iflen
(set
(i))
!=len
(i):
return
false
for i in
range(9
):for j in
range(9
):[i])
cc=[x for x in l if x!=
'.']
iflen
(set
(cc))!=
len(cc)
:return
false
l.clear(
)for i in
range(0
,9,3
):for j in
range(0
,9,3
):for k in
range(3
):for v in
range(3
):[i+v]
) cc=
[x for x in l if x!=
'.']
iflen
(set
(cc))!=
len(cc)
:return
false
l.clear(
)return
true
將檢查的部分放入了轉換的迴圈裡,按理說應該節約時間的,結果執行結果更慢了。 036有效的數獨
1 include 000庫函式.h 2 3 一看,沒想出什麼好法子,就遍歷了4 最重要的是如何比較小九宮格的資料5 44ms 6class solution 21return true 22 23 24 2526 部落格答案 27 使用容器,大大減少了迴圈次數,但大大增加了記憶體空間 28 36m...
有效的數獨
判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用 表示。示...
有效的數獨
題目 判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。說明上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用...