LeetCode 36 有效的數獨

2021-09-13 02:56:12 字數 1297 閱讀 1775

1. 題目

2. 解答

將數獨中數字的 ascii 碼值轉化到 0-8 之間作為雜湊值,建立乙個雜湊表,然後分別逐行、逐列、逐宮(3*3小塊)統計每個數字的出現次數,若出現次數大於 1,則數獨無效。

class solution ;

int i = 0, j = 0;

int index = 0;

// 逐行掃瞄,判斷數字 1-9 在每一行是否只出現一次

for (i = 0; i < 9; i++)

for (j = 0; j < 9; j++)} }

}// 逐列掃瞄,判斷數字 1-9 在每一列是否只出現一次

for (i = 0; i < 9; i++)

for (j = 0; j < 9; j++)}}

}// 逐塊掃瞄,判斷數字 1-9 在每一塊是否只出現一次

int row = 0;

int col = 0;

for (int m = 0; m < 3; m++)

for (i = row; i < row+3; i++)}}

}}}return true;}};

上面的方法需要對數獨遍歷三次,我們也可以做到在遍歷一次的情況下判斷數獨是否有效。

針對每行、每列和每宮分別建立乙個雜湊表,然後在遍歷數獨的時候,根據下標 $i, j$ 的變化確定三個雜湊表的值,若其中乙個值大於 1,則數獨無效。

其中,通過下標 $i, j$ 來獲取如下宮的順序可以通過 $i / 3 * 3 + j / 3$ 來獲取。

// 列雜湊表

table2[j][index]++;

if (table2[j][index] > 1)

// 宮雜湊表

table3[i/3*3+j/3][index]++;

if (table3[i/3*3+j/3][index] > 1)} }

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