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 相关文章推荐
求解开jscript.encode代码的asp函数
Feb 28 Javascript
JavaScript Accessor实现说明
Dec 06 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
Jun 28 Javascript
jquery利用ajax调用后台方法实例
Aug 23 Javascript
JS实现日期加减的方法
Nov 29 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
Mar 28 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
Dec 19 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
Feb 20 Javascript
老生常谈js中0到底是 true 还是 false
Mar 08 Javascript
vue实现点击当前标签高亮效果【推荐】
Jun 22 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
Apr 08 Javascript
在Uni中使用Vue的EventBus总线机制操作
Jul 31 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
Python遍历pandas数据方法总结
2018/02/09 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
最新奶茶店创业计划书范文
2014/02/08 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫