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 相关文章推荐
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
May 27 Javascript
javascript运行机制之this详细介绍
Feb 07 Javascript
Ext JS动态加载JavaScript创建窗体的方法
Jun 23 Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
Mar 21 jQuery
Node.js实现文件上传的示例
Jun 28 Javascript
AngularJS自定义过滤器用法经典实例总结
May 17 Javascript
bootstrap table合并行数据并居中对齐效果
Oct 17 Javascript
发布Angular应用至生产环境的方法
Dec 10 Javascript
微信小程序关键字变色实现代码实例
Dec 13 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 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异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python可跨平台实现获取按键的方法
2015/03/05 Python
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python 实现矩阵填充0的例子
2019/11/29 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
如何执行一个shell程序
2012/11/23 面试题
物流专业求职信
2014/06/30 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
个人党性分析总结
2015/03/05 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
vue-element-admin项目导入和导出的实现
2021/05/21 Vue.js