Leetcode 36 有效的數獨

2021-09-25 01:34:17 字數 2410 閱讀 1138

判斷乙個 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 存在, 因此這個數獨是無效的。

說明:

class

solution

else}}

s.clear()

;}//列重複檢測

for(

int n =

0; n <

9; n ++

)else}}

s.clear()

;}int m0, m1, n0, n1;

//塊重複檢測

for(

int m =

0; m <

9; m++

)else

if(m %3==

1)else

if(n %3==

0)else

if(n %3==

1)else

if(m0 > m)

if(board[m0]

[n1]

!='.')}

if(m1 > m)

if(board[m1]

[n1]

!='.')}

if(s.

count

(board[m]

[n])

) s.

clear()

;}}}

return

true;}

};

雖然程式執行效果還不錯,執行時間和空間均超過了百分之80多的解答,但是**比較複雜,可讀性差,下面是別人家的改進解法。

class

solution

}return

true;}

};

可以看到,將判斷合三為一,大大減少了**量。特別注意以下兩點:

set、hash等容器都可以定義容器陣列,此操作省去了連續定義多個容器的問題。

注意這個**:bindex = (i / 3)* 3 + j / 3,它的功能是定位到元素所在的9格塊,此思想解決了我的**中定義了一堆if的問題。

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...