Python如何判断数独是否合法


Posted in Python onSeptember 08, 2016

介绍

该数独可能只填充了部分数字,其中缺少的数字用 . 表示。

注意事项

一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。

解体思路

将数独按照行、列和块进行预处理,然后分别判断是否合法。
利用Python的表达式推导,匿名函数和all函数可以很方便的进行处理。

代码

class Solution:

# @param board, a 9x9 2D array
# @return a boolean
def isValidSudoku(self, board):
 rows = [list(lst[::]) for lst in board]
 columns = [[lst[idx] for lst in board] for idx in range(9)]
 blocks_origin = [board[row][column] for x in [[0, 1, 2], [3, 4, 5], [6, 7, 8]] for y in [[0, 1, 2], [3, 4, 5], [6, 7, 8]] for row in x for column in y] # 利用一些技巧直接按块储存数据
 blocks = [[blocks_origin[row * 9 + column] for column in range(9)] for row in range(9)]
 check = lambda lst: all([lst.count(x) == 1 for x in lst if x != '.']) # 判断一条记录(按某种方式排列的九个数字)是否合法
 return all([check(x) for style in (rows, columns, blocks) for x in style]) # 一步搞定

小结

能不用循环体尽量不用循环体,以上就是这篇文章的全部内容,希望对大家的学习和工作能有所帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
在Python中处理日期和时间的基本知识点整理汇总
May 22 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
Python 多进程和数据传递的理解
Oct 09 Python
Python从零开始创建区块链
Mar 06 Python
pycharm执行python时,填写参数的方法
Oct 29 Python
python实现PID算法及测试的例子
Aug 08 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
python中Mako库实例用法
Dec 31 Python
Python中的tkinter库简单案例详解
Jan 22 Python
python框架django基础指南
Sep 08 #Python
python中星号变量的几种特殊用法
Sep 07 #Python
Python 实现 贪吃蛇大作战 代码分享
Sep 07 #Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 #Python
Python 编码处理-str与Unicode的区别
Sep 06 #Python
Python如何获取系统iops示例代码
Sep 06 #Python
python3编码问题汇总
Sep 06 #Python
You might like
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
React Router v4 入坑指南(小结)
2018/04/08 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
JS FormData对象使用方法实例详解
2020/02/12 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
Python简单的制作图片验证码实例
2017/05/31 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
中学政教处工作总结
2015/08/13 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书