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性能优化的20条建议
Oct 25 Python
Python正则表达式匹配HTML页面编码
Apr 08 Python
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
Python的Flask开发框架简单上手笔记
Nov 16 Python
Python callable()函数用法实例分析
Mar 17 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
python解析含有重复key的json方法
Jan 22 Python
Python Opencv实现图像轮廓识别功能
Mar 23 Python
Python Pandas数据结构简单介绍
Jul 03 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
pytorch简介
Nov 11 Python
python如何修改文件时间属性
Feb 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教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
关于js注册事件的常用方法
2013/04/03 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
Python时间的精准正则匹配方法分析
2017/08/17 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python支持多线程的爬虫实例
2019/12/21 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
python中format函数如何使用
2020/06/22 Python
JAVA程序员自荐书
2014/01/30 职场文书
捐书活动总结
2014/05/04 职场文书
导师工作推荐信范文
2014/05/17 职场文书
司法所长先进事迹
2014/06/02 职场文书
医院合作协议书
2014/08/19 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
投诉书范文
2015/07/02 职场文书
食堂卫生管理制度
2015/08/04 职场文书
爱国教育主题班会
2015/08/14 职场文书
党组织结对共建协议书
2016/03/23 职场文书