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

數(shù)獨(dú)部分空格內(nèi)已填入了數(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
解釋: 除了第一行的第一個(gè)數(shù)字從 5 改為 8 以外,空格內(nèi)其他數(shù)字均與 示例1 相同。
但由于位于左上角的 3x3 宮內(nèi)有兩個(gè) 8 存在, 因此這個(gè)數(shù)獨(dú)是無效的。
說明:
1.一個(gè)有效的數(shù)獨(dú)(部分已被填充)不一定是可解的。
2.只需要根據(jù)以上規(guī)則,驗(yàn)證已經(jīng)填入的數(shù)字是否有效即可。
3.給定數(shù)獨(dú)序列只包含數(shù)字 1-9 和字符 ‘.' 。
4.給定數(shù)獨(dú)永遠(yuǎn)是 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代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼,可得如下運(yùn)行結(jié)果:

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
JavaScript原生xmlHttp與jquery的ajax方法json數(shù)據(jù)格式實(shí)例
這篇文章主要介紹了JavaScript原生xmlHttp與jquery的ajax方法json數(shù)據(jù)格式實(shí)例的相關(guān)資料,需要的朋友可以參考下2015-12-12
js函數(shù)參數(shù)設(shè)置默認(rèn)值的一種變通實(shí)現(xiàn)方法
js函數(shù)中有個(gè)儲(chǔ)存參數(shù)的數(shù)組arguments,因此js版支持參數(shù)默認(rèn)值的函數(shù)可以通過另外一種變通的方法實(shí)現(xiàn)2014-05-05
簡(jiǎn)單使用webpack打包文件的實(shí)現(xiàn)
這篇文章主要介紹了簡(jiǎn)單使用webpack打包文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Electron實(shí)現(xiàn)右鍵保存圖片到本地功能
Electron是開發(fā)跨平臺(tái)pc客戶端的利器,最近在使用它時(shí)遇到一個(gè)需要右鍵保存頁面中圖片的功能,Electron雖使用了Chromium內(nèi)核但卻無法直接使用系統(tǒng)右鍵,需要自定義右鍵菜單,然后添加圖片保存功能,以下是我的使用方法,需要的朋友可以參考下2024-07-07

