Python判断有效的数独算法示例


Posted in Python onFebruary 23, 2019

本文实例讲述了Python判断有效的数独算法。分享给大家供大家参考,具体如下:

一、题目

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

1. 数字 1-9 在每一行只能出现一次。
2. 数字 1-9 在每一列只能出现一次。
3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

数独部分空格内已填入了数字,空白格用 ‘.' 表示。

例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 存在, 因此这个数独是无效的。

二、解法

  • 先创建三个空数组 row、col、cell,以 cell 为例,里面的每个空字典都代表一个 3×3单元格,然后我们需要把数据一个个填进去
  • 遍历整个二维数组,然后边遍历边把数组分别存入到 行 row , 列 col , 3×3单元格 cell 内的字典,存为key ,而不是 value 。
  • 然后我们就可以判断,行、列、3×3单元格 对应的字典内是否已经存在board[x][y]这个键名,如果存在,那么说明重复了,返回 False
  • 注意,字典中的值这里都为1,但是没有任何意义,你可以随意更改
  • 把数组存入 3×3的单元格是一个难点,num = 3*(x//3)+y//3,这个式子是关键,可以找个数独,然后代入进去好好理解下
  • 当然你也可以不用这个式子,用if/else语句来判断也行,那样比较好理解,但是不如这个式子简洁
  • 类似于: if y<3 : ... elif 3<=y<6 : ... elif 6<=y : ...,

代码如下:

#row,col,cell分别代表行,列,3x3单元格
row, col, cell =
[{}, {}, {}, {}, {}, {}, {}, {}, {}],
[{}, {}, {}, {}, {}, {}, {}, {}, {}],
[{}, {}, {}, {}, {}, {}, {}, {}, {}]
for x in range(9):
  for y in range(9):
    #取得单元格
    num = 3*(x//3)+y//3
    temp = board[x][y]
    #不需要存入 '.'
    if temp != '.':
      if (temp not in row[x]
      and temp not in col[y]
      and temp not in cell[num]):
        row[x][temp] = '1'
        col[y][temp] = '1'
        cell[num][temp] = '1'
      else:
        return False
return True

时间 64ms,击败了 99.3%

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
用Python输出一个杨辉三角的例子
Jun 13 Python
Python中lambda的用法及其与def的区别解析
Jul 28 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
flask-restful使用总结
Dec 04 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
pytorch中的transforms模块实例详解
Dec 31 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 Python
python Timer 类使用介绍
Dec 28 Python
Python实现的旋转数组功能算法示例
Feb 23 #Python
Python实现求两个数组交集的方法示例
Feb 23 #Python
Python神奇的内置函数locals的实例讲解
Feb 22 #Python
Python玩转Excel的读写改实例
Feb 22 #Python
Python操作配置文件ini的三种方法讲解
Feb 22 #Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 #Python
python调用虹软2.0第三版的具体使用
Feb 22 #Python
You might like
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
python matlibplot绘制多条曲线图
2021/02/19 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
Python数据库小程序源代码
2019/09/15 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
python中sys模块是做什么用的
2020/08/16 Python
通过代码实例了解Python sys模块
2020/09/14 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
聚网科技C++面试笔试题
2015/09/01 面试题
表彰先进集体通报
2014/01/12 职场文书
小学老师寄语大全
2014/04/04 职场文书
python装饰器代码解析
2022/03/23 Python