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 相关文章推荐
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
一张图带我们入门Python基础教程
Feb 05 Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
教你用Python创建微信聊天机器人
Mar 31 Python
pyttsx3实现中文文字转语音的方法
Dec 24 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
python 已知平行四边形三个点,求第四个点的案例
Apr 12 Python
Numpy中的数组搜索中np.where方法详细介绍
Jan 08 Python
python 爬取华为应用市场评论
May 29 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
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
使用Python 统计高频字数的方法
2019/01/31 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
如何将json数据转换为python数据
2020/09/04 Python
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
自我鉴定思想方面
2013/10/07 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
学校招生宣传广告词
2014/03/19 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS
python lambda 表达式形式分析
2022/04/03 Python
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang