JS实现判断有效的数独算法示例


Posted in Javascript onFebruary 25, 2019

本文实例讲述了JS实现判断有效的数独算法。分享给大家供大家参考,具体如下:

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

1.数字 1-9 在每一行只能出现一次。
2.数字 1-9 在每一列只能出现一次。
3.数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

JS实现判断有效的数独算法示例

数独部分空格内已填入了数字,空白格用 ‘.' 表示。

示例 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

解释: 除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。

但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。

说明:

1.一个有效的数独(部分已被填充)不一定是可解的。
2.只需要根据以上规则,验证已经填入的数字是否有效即可。
3.给定数独序列只包含数字 1-9 和字符 ‘.' 。
4.给定数独永远是 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.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

JS实现判断有效的数独算法示例

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JSChart轻量级图形报表工具(内置函数中文参考)
Oct 11 Javascript
JavaScript 高级篇之函数 (四)
Apr 07 Javascript
复制js对象方法(详解)
Jul 08 Javascript
jQuery设置div一直在页面顶部显示的方法
Oct 24 Javascript
Jquery 在页面加载后执行的几种方式
Mar 14 Javascript
jQuery获取与设置iframe高度的方法
Aug 01 Javascript
基于javascript实现最简单选项卡切换
Feb 01 Javascript
javascript 中null和undefined区分和比较
Apr 19 Javascript
Vue.js实现价格计算器功能
Mar 30 Javascript
浅谈Express异步进化史
Sep 09 Javascript
微信小程序身份证验证方法实现详解
Jun 28 Javascript
vue中的.$mount('#app')手动挂载操作
Sep 02 Javascript
js实现通过开始结束控制的计时器
Feb 25 #Javascript
js实现倒计时器自定义时间和暂停
Feb 25 #Javascript
JS module的导出和导入的实现代码
Feb 25 #Javascript
js实现多个倒计时并行 js拼团倒计时
Feb 25 #Javascript
js实现网页同时进行多个倒计时功能
Feb 25 #Javascript
js实现一个页面多个倒计时的3种方法
Feb 25 #Javascript
Vue自定义指令上报Google Analytics事件统计的方法
Feb 25 #Javascript
You might like
用PHP实现验证码功能
2006/10/09 PHP
域名查询代码公布
2006/10/09 PHP
个人站长制做网页常用的php代码
2007/03/03 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
深入浅析php json 格式控制
2015/12/24 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
js indexOf()定义和用法
2012/10/21 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
Python金融数据可视化汇总
2017/11/17 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
html5 视频播放解决方案
2016/11/06 HTML / CSS
美国著名手表网站:Timepiece
2017/11/15 全球购物
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
2013年大学生的自我鉴定
2013/10/24 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
幼儿园小班评语
2014/04/18 职场文书
计算机系本科生求职信
2014/05/31 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript