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 相关文章推荐
JQuery 风格的HTML文本转义
Jul 01 Javascript
JavaScript初学者应注意的七个细节详细介绍
Dec 27 Javascript
Jquery倒计时源码分享
May 16 Javascript
微信小程序 Storage API实例详解
Oct 02 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
Jan 09 Javascript
使用jquery给新生的th绑定hover事件的实例
Feb 10 Javascript
js实现年月日表单三级联动
Apr 17 Javascript
详解基于vue的移动web app页面缓存解决方案
Aug 03 Javascript
基于AngularJS的简单使用详解
Sep 10 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
Sep 13 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
Nov 30 Javascript
layui自定义ajax左侧三级菜单
Jul 26 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下MYSQL limit的优化
2008/01/10 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
php中的explode()函数实例介绍
2019/01/18 PHP
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
Python使用getpass库读取密码的示例
2017/10/10 Python
Python简单实现控制电脑的方法
2018/01/22 Python
python 2.7.14安装图文教程
2018/04/08 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python列表与元组的异同详解
2019/07/02 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
室内设计实习自我鉴定
2013/09/25 职场文书
本科生学习总结的自我评价
2013/10/02 职场文书
给全校老师的建议书
2014/03/13 职场文书
员工趣味活动方案
2014/08/27 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
Python学习之包与模块详解
2022/03/19 Python