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 相关文章推荐
python动态监控日志内容的示例
Feb 16 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
python实现单向链表详解
Feb 08 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
Django 通过JS实现ajax过程详解
Jul 30 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
基于pytorch的lstm参数使用详解
Jan 14 Python
Matplotlib中rcParams使用方法
Jan 05 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
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
php fread函数使用方法总结
2019/05/28 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
html下载本地
2006/06/19 Javascript
Js callBack 返回前一页的js方法
2008/11/30 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
详解Django CAS 解决方案
2019/10/30 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
简单的Python人脸识别系统
2020/07/14 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
2014年小班元旦活动方案
2014/02/16 职场文书
自荐信的格式
2014/03/10 职场文书
综合内勤岗位职责
2014/04/14 职场文书
成绩单家长评语大全
2014/04/16 职场文书
师范毕业生求职信
2014/07/11 职场文书
2014年统计工作总结
2014/11/21 职场文书
土地租赁协议书
2015/01/29 职场文书
单身证明范本
2015/06/15 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书