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下申明对象的几种方法小结
Oct 02 Javascript
Eval and new funciton not the same thing
Dec 27 Javascript
动态加载dtree.js树treeview(示例代码)
Dec 17 Javascript
原生javascript实现简单的datagrid数据表格
Jan 02 Javascript
全面了解addEventListener和on的区别
Jul 14 Javascript
JS实现图片局部放大或缩小的方法
Aug 20 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
Oct 10 Javascript
JS实现Ajax的方法分析
Dec 20 Javascript
animate.css在vue项目中的使用教程
Aug 05 Javascript
微信小程序提取公用函数到util.js及使用方法示例
Jan 10 Javascript
JS中间件设计模式的深入探讨与实例分析
Apr 11 Javascript
vue cli3适配所有端方案的实现
Apr 13 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&amp;mysql(一)
2006/10/09 PHP
PHP自定义多进制的方法
2016/11/03 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
小程序实现多列选择器
2019/02/15 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
Python+django实现文件上传
2016/01/17 Python
python tkinter界面居中显示的方法
2018/10/11 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
Python绘制动态水球图过程详解
2020/06/03 Python
法国珠宝店:CLEOR
2017/01/29 全球购物
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
银行毕业实习自我鉴定
2013/09/19 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
报到证办理个人委托书
2014/10/06 职场文书
辩护词范文大全
2015/05/21 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏