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中的argv和argc使用详解
Dec 15 Python
Python3 SSH远程连接服务器的方法示例
Dec 29 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
python3 pathlib库Path类方法总结
Dec 26 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
使用python客户端访问impala的操作方式
Mar 28 Python
Pytorch 统计模型参数量的操作 param.numel()
May 13 Python
Python实现生成bmp图像的方法
Jun 13 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 Python
Python实现双向链表基本操作
May 25 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类
2006/07/15 PHP
PHP的FTP学习(二)
2006/10/09 PHP
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
一端时间轮换的广告
2006/06/26 Javascript
获取Javscript执行函数名称的方法
2006/12/22 Javascript
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
js 表单验证方法(实用)
2009/04/28 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
boostrapTable的refresh和refreshOptions区别浅析
2017/01/22 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
Python的Flask框架中web表单的教程
2015/04/20 Python
Python实现简单多线程任务队列
2016/02/27 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
python的中异常处理机制
2018/08/30 Python
python实现机器学习之元线性回归
2018/09/06 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
J2EE面试题集锦(附答案)
2013/08/16 面试题
员工升职自荐信
2015/03/27 职场文书
安全生产培训心得体会
2016/01/18 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
Nginx速查手册及常见问题
2022/04/07 Servers