力扣日記 036 有效的數獨

2021-10-01 03:12:20 字數 2231 閱讀 1154

乙個檢驗數獨的方法。

數獨以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 宮內只能出現一次。說明上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用...