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的Tornado框架对子域名和泛域名的支持
May 02 Python
python获取一组数据里最大值max函数用法实例
May 26 Python
Python实现比较两个文件夹中代码变化的方法
Jul 10 Python
使用pyecharts无法import Bar的解决方案
Apr 23 Python
python实现flappy bird小游戏
Dec 24 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 Python
什么是Python变量作用域
Jun 03 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
Python pip使用超时问题解决方案
Aug 03 Python
python实现发送QQ邮件(可加附件)
Dec 23 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
Syphon 秘笈
2021/03/03 冲泡冲煮
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php实现微信发红包
2015/12/05 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
django之session与分页(实例讲解)
2017/11/13 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
Python matplotlib实时画图案例
2020/04/23 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
教师自我评价范例
2013/09/24 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
教师演讲稿大全
2014/05/16 职场文书
新郎答谢词
2015/01/04 职场文书
学习保证书怎么写
2015/02/26 职场文书
中秋节寄语2015
2015/03/24 职场文书
党小组考察意见
2015/06/02 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript