本文实例讲述了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数据结构与算法教程》、《Python列表(list)操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

python图像数独_Python判断有效的数独算法示例相关推荐

  1. python求最小公倍数_Python实现的求解最小公倍数算法示例

    这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...

  2. python最小公倍数 菜鸟_Python实现的求解最小公倍数算法示例

    本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具体如下: 简单分析了一下,前面介绍的最大公约数的求解方法跟最小公倍数求解方法类似,只需要改一个简单的条件,然后做一点简单的其 ...

  3. python中英文字符怎么区分-python 利用utf-8编码判断中英文字符的简单示例

    这篇文章主要为大家详细介绍了python 利用utf-8编码判断中英文字符的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣python 利用utf-8编码判断中英文字符的简单示例的小伙伴,下 ...

  4. python图像数独_Python图像识别+KNN求解数独的实现

    Python-opencv+KNN求解数独 最近一直在玩数独,突发奇想实现图像识别求解数独,输入到输出平均需要0.5s. 整体思路大概就是识别出图中数字生成list,然后求解. 输入输出demo 数独 ...

  5. python图像清晰度_python 图像判断,清晰度(明暗),彩色与黑白实例

    1,判断图像清晰度,明暗, 原理,Laplacian算法.偏暗的图片,二阶导数小,区域变化小:偏亮的图片,二阶导数大,区域变化快. import cv2 def getImageVar(imgPath ...

  6. python中最小公倍数函数_Python实现的求解最小公倍数算法示例

    这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...

  7. python kmeans聚类_python机器学习之k-means聚类算法(1)

    k-means算法是一种无监督的机器学习算法,虽然是机器学习,但它简单易于实现.本篇采用python语言,自主编程实现k-menas算法,当然python用专门的库函数来实现该算法,但本次主要使用该算 ...

  8. python图像检测_Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...

  9. python输出偶数_Python 判断奇数偶数的方法

    Python 判断奇数偶数的方法 以下实例用于判断一个数字是否为奇数或偶数: # -*- coding: UTF-8 -*- # Filename : test.py # Python 判断奇数偶数 ...

最新文章

  1. 判断一个字符串的所有字符是否都在另一个字符串中
  2. VS Code 1.37 发布!多达数十个图标迎来全新设计
  3. GIL , 线程池 , 同步 , 异步 , 队列 , 事件
  4. gin 怎么通过 post 发送结构体_Go Web 框架 Gin 实践12—优化配置结构及实现图片上传...
  5. 飞鸽传书最新C++源码:这两个消息钩子
  6. 残疾人软件开发_更高级别的可访问性:我使freeCodeCamp指南对残疾人可用的5种方式...
  7. 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理
  8. 程序员的时间管理哲学——打造自己的分时管理系统
  9. 曝华为新成立10大预备军团;被罚2500万欧元,苹果开放第三方支付;GitLab 14.8发布 | 极客头条...
  10. Windows Azure Cloud Service (8) Role及其生命周期模型
  11. python编程入门第3版pdf-Python程序设计 第3版pdf
  12. 对于机器学习而言如何翻越测试集
  13. 深入浅出4G标准:LTE FDD和LTE TDD
  14. 施乐7855维修手册中文版_GE苏伊士MK-2EPHARM EDI模块维修、清洗、注意事项
  15. 2021-05-14 kk日记,TBASE数据表更换shard key
  16. nf_regester
  17. 个人博客系统的设计与实现
  18. python是哪个国家的品牌,爬取全国12个热门城市奶茶店铺情况,看看你的城市哪个品牌最多...
  19. 中国Linux公社校园联络员第四次全体大会会议记录
  20. SQLServer还原数据库

热门文章

  1. Date和Calendar【JAVA基础】
  2. Build Mesh!
  3. IOS制作马甲包从小白到精通
  4. 中创算力:打造区块链产业生态,助力郑州创建国家级区块链先导区​
  5. Angular 教程:英雄之旅
  6. java executors 详解_线程池—Executors 详解
  7. git 查看和修改本地用户名和邮箱
  8. 2022年标准员-通用基础(标准员)考试题及在线模拟考试
  9. Glide的缓存机制,大厂面试题汇总
  10. SushiSwap历任“主厨”史