LeetCode 36 有效的數獨

2021-10-06 14:35:23 字數 1030 閱讀 4278

思路:

主要是找出座標之間的規律。

判斷行:對於每一行來說,都不可以重複。若這一行所有的位置都填充了數字,且要是有效的一行數獨,則這一行的 9 個數字都不重複且為1~9,那麼可以使用長度為 9 的陣列來進行檢驗,遍歷這一行的每乙個數字,第一次出現這個數字num時,將檢驗陣列的第 num - 1 處賦值為1,若之後遍歷的過程**現了這個數子num(檢驗陣列的第 num - 1 處的值為1),則說明這一行不符合要求。

判斷列:判斷列的思路與判斷行的思路一致。

判斷每個3x3小方格:從左往右依次對每乙個3x3小方格進行編號,如下圖:

接下來,尋找座標對應於方格的規律。

因為劃分為3x3的格仔,則自然可以想到除以3,比如第0,1,2個方格,通過列座標除以3即可得到。但,最重要的問題是接下來的3,4,5,6,7,8方格該怎麼找,此時,又發現了新規律,如下圖:

可以發現,每一行的方格都是由列來決定是這一行的第幾個方格。

剩下的問題就是如何利用行座標 i 來確定當前行上方共有幾個 3x3 方格。(如第3方格,上方共有3個方格,第4方格,上方有3個方格,第7方格,上方有6個方格)

首先還是要除以3,畢竟是以3來劃分,那麼就有 i / 3,會發現除完之後的結果為 0(對應 i 為0~2),1(對應 i 為3~5),2(對應 i 為6~8),不是0,3,6。但是到了這塊,就會發現有倍數關係,即可推出 i / 3 * 3 即為當前行的上方有多少個方格。

則方格的編號與座標的關係為:num = i / 3 * 3 + j / 3

至此,所有的問題已經解決,剩下就是編碼了。

public boolean isvalidsudoku(char board)  else }}

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