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中zfill()方法的使用教程
May 20 Python
Python遍历文件夹和读写文件的实现代码
Aug 28 Python
Python实现购物系统(示例讲解)
Sep 13 Python
对pandas中两种数据类型Series和DataFrame的区别详解
Nov 12 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
python微信撤回监测代码
Apr 29 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
python3 下载网络图片代码实例
Aug 27 Python
python实现的汉诺塔算法示例
Oct 23 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
Python任务自动化工具tox使用教程
Mar 17 Python
python 批量下载bilibili视频的gui程序
Nov 20 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
php查看当前Session的ID实例
2015/03/16 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
JS跨域问题详解
2014/11/25 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
python中子类调用父类函数的方法示例
2017/08/18 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
python去除文件中重复的行实例
2018/06/29 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
AUC计算方法与Python实现代码
2020/02/28 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
Java的for语句中break, continue和return的区别
2013/12/19 面试题
行政人员工作职责
2013/12/05 职场文书
工作自荐信
2013/12/11 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
户外活动总结范文
2014/04/30 职场文书
行政管理专业求职信
2014/07/06 职场文书
暑假社会实践心得体会
2014/09/02 职场文书