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实现自动更换ip的方法
May 05 Python
Python3之文件读写操作的实例讲解
Jan 23 Python
Python(Django)项目与Apache的管理交互的方法
May 16 Python
python3 flask实现文件上传功能
Mar 20 Python
ubuntu16.04制作vim和python3的开发环境
Sep 23 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
Python实现深度遍历和广度遍历的方法
Jan 22 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
golang/python实现归并排序实例代码
Aug 30 Python
python读取pdf格式文档的实现代码
Apr 01 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编程效率的方法
2013/11/07 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
python实现连接mongodb的方法
2015/05/08 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
社团活动策划书范文
2014/01/09 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
《乞巧》教学反思
2014/02/27 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python