JS實現(xiàn)判斷有效的數(shù)獨算法示例
本文實例講述了JS實現(xiàn)判斷有效的數(shù)獨算法。分享給大家供大家參考,具體如下:
判斷一個 9x9 的數(shù)獨是否有效。只需要根據(jù)以下規(guī)則,驗證已經(jīng)填入的數(shù)字是否有效即可。
1.數(shù)字 1-9 在每一行只能出現(xiàn)一次。
2.數(shù)字 1-9 在每一列只能出現(xiàn)一次。
3.數(shù)字 1-9 在每一個以粗實線分隔的 3x3 宮內(nèi)只能出現(xiàn)一次。
數(shù)獨部分空格內(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
解釋: 除了第一行的第一個數(shù)字從 5 改為 8 以外,空格內(nèi)其他數(shù)字均與 示例1 相同。
但由于位于左上角的 3x3 宮內(nèi)有兩個 8 存在, 因此這個數(shù)獨是無效的。
說明:
1.一個有效的數(shù)獨(部分已被填充)不一定是可解的。
2.只需要根據(jù)以上規(guī)則,驗證已經(jīng)填入的數(shù)字是否有效即可。
3.給定數(shù)獨序列只包含數(shù)字 1-9 和字符 ‘.' 。
4.給定數(shù)獨永遠(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代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼,可得如下運行結(jié)果:
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)學(xué)運算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
javascript面向?qū)ο笾蚕沓蓡T屬性與方法及prototype關(guān)鍵字用法
這篇文章主要介紹了javascript面向?qū)ο笾蚕沓蓡T屬性與方法及prototype關(guān)鍵字用法,實例分析了prototype關(guān)鍵字在共享成員屬性與方法中的原理與使用技巧,需要的朋友可以參考下2015-01-01如何在uni-app使用微軟的文字轉(zhuǎn)語音服務(wù)
有了語音識別,交流就會變得很簡單,下面這篇文章主要給大家介紹了關(guān)于如何在uni-app使用微軟的文字轉(zhuǎn)語音服務(wù)的相關(guān)資料,需要的朋友可以參考下2022-06-06詳解Bootstrap創(chuàng)建表單的三種格式(一)
在本章中,我們將學(xué)習(xí)如何使用 Bootstrap 創(chuàng)建表單。Bootstrap 通過一些簡單的 HTML 標(biāo)簽和擴展的類即可創(chuàng)建出不同樣式的表單,對bootstrap 表單相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2016-01-01關(guān)于js拖拽上傳 [一個拖拽上傳修改頭像的流程]
拖拽是操作系統(tǒng)用戶體驗最偉大的改進(jìn)之一。它讓人隨心所欲的操作,更符合人們的直觀感受。2011-07-07JavaScript如何使用Promise實現(xiàn)分批處理接口請求
當(dāng)我們在開發(fā)時遇到需要同時發(fā)起百條接口請求怎么辦呢,本文主要來和大家介紹一下JavaScript如何使用Promise實現(xiàn)分批處理接口請求,需要的可以參考下2024-03-03LayUI動態(tài)設(shè)置checkbox不顯示的解決方法
今天小編就為大家分享一篇LayUI動態(tài)設(shè)置checkbox不顯示的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09