JS實現(xiàn)判斷有效的數(shù)獨算法示例
本文實例講述了JS實現(xiàn)判斷有效的數(shù)獨算法。分享給大家供大家參考,具體如下:
判斷一個 9x9 的數(shù)獨是否有效。只需要根據(jù)以下規(guī)則,驗證已經填入的數(shù)字是否有效即可。
1.數(shù)字 1-9 在每一行只能出現(xiàn)一次。
2.數(shù)字 1-9 在每一列只能出現(xiàn)一次。
3.數(shù)字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現(xiàn)一次。

數(shù)獨部分空格內已填入了數(shù)字,空白格用 ‘.' 表示。
示例 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
解釋: 除了第一行的第一個數(shù)字從 5 改為 8 以外,空格內其他數(shù)字均與 示例1 相同。
但由于位于左上角的 3x3 宮內有兩個 8 存在, 因此這個數(shù)獨是無效的。
說明:
1.一個有效的數(shù)獨(部分已被填充)不一定是可解的。
2.只需要根據(jù)以上規(guī)則,驗證已經填入的數(shù)字是否有效即可。
3.給定數(shù)獨序列只包含數(shù)字 1-9 和字符 ‘.' 。
4.給定數(shù)獨永遠是 9x9 形式的。
<script>
var isValidSudoku = function(board) {
const boxes = [{}, {}, {}, {}, {}, {}, {}, {}, {}];
const cols = [{}, {}, {}, {}, {}, {}, {}, {}, {}];
const rows = [{}, {}, {}, {}, {}, {}, {}, {}, {}];
let test = [{}, {}, {}, {}, {}, {}, {}, {}, {}];
for (let i = 0; i < 9; i++) {
for (let j = 0; j < 9; j++) {
const digit = board[i][j];
if (digit !== '.') {
const k = Math.floor(j / 3) + (Math.floor(i / 3) * 3);
if (boxes[k][digit] || cols[j][digit] || rows[i][digit]) {
return false;
}
boxes[k][digit] = cols[j][digit] = rows[i][digit] = true;
}
}
}
return true;
};
const board = [
["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"]
]
console.log(isValidSudoku(board))
</script>
使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼,可得如下運行結果:

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數(shù)學運算用法總結》、《JavaScript數(shù)據(jù)結構與算法技巧總結》、《JavaScript數(shù)組操作技巧總結》、《JavaScript排序算法總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript查找算法技巧總結》及《JavaScript錯誤與調試技巧總結》
希望本文所述對大家JavaScript程序設計有所幫助。
相關文章
JavaScript原生xmlHttp與jquery的ajax方法json數(shù)據(jù)格式實例
這篇文章主要介紹了JavaScript原生xmlHttp與jquery的ajax方法json數(shù)據(jù)格式實例的相關資料,需要的朋友可以參考下2015-12-12
js函數(shù)參數(shù)設置默認值的一種變通實現(xiàn)方法
js函數(shù)中有個儲存參數(shù)的數(shù)組arguments,因此js版支持參數(shù)默認值的函數(shù)可以通過另外一種變通的方法實現(xiàn)2014-05-05

