這題的重點在於如何用更短的時間代價去判斷某個陣列是否存在重複元素。
之前的題目,對於這種問題,最典型的要麼就是排序,要麼就是雜湊。某些情況也可以用位運算去判重。這題我暫時沒去看位運算相關的解法。
排序後再查重的時間效率一般,暫且不考慮。而這個數獨無非是九×九的二維陣列,即使使用額外的空間,也不必太糾結空間上的消耗。
這題雖然可以用雜湊表或者集合,但直接用bool陣列也很方便,比較域的範圍只有1至9。
具體思路見下面**的注釋,其中有三個二維的布林陣列,分別用於九條行、九條列、九個子數獨。
bool isvalidsudoku(vectorchar>> &board) , col[9][9] = , sub[9][9] = ;//布林陣列,用法為,例如,若index=5位置的元素為true,則說明已存在5。
//遍歷一遍數獨即可完成所有檢查。不需要三遍。
//i為行數,j為列數
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...