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 相关文章推荐
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 Javascript
table行随鼠标移动变色示例
May 07 Javascript
详解javascript中原始数据类型Null和Undefined
Dec 17 Javascript
原生JS实现拖拽图片效果
Aug 27 Javascript
JS中对Cookie的操作详解
Aug 05 Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 Javascript
JS非空验证及邮箱验证的实例
Aug 11 Javascript
Vue.js进行查询操作的实例详解
Aug 25 Javascript
详解Chart.js轻量级图表库的使用经验
May 22 Javascript
微信小程序实现的自定义分享功能示例
Feb 12 Javascript
vue操作动画的记录animate.css实例代码
Apr 26 Javascript
node中短信api实现验证码登录的示例代码
Jan 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获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
javascript实现的listview效果
2007/04/28 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
2019大学毕业晚会主持词
2019/06/21 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android