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;
}};複製**
上面的方法需要對數獨遍歷三次,我們也可以做到在遍歷一次的情況下判斷數獨是否有效。
針對每行、每列和每宮分別建立乙個雜湊表,然後在遍歷數獨的時候,根據下標
其中,通過下標36
9
class
solution , table2[9][9] = , table3[9][9] = ;
int i = 0, j = 0;
int index = 0;
for (i = 0; i < 9; i++)
// 列雜湊表
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...