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 相关文章推荐
打开电脑上的QQ的python代码
Feb 10 Python
python连接池实现示例程序
Nov 26 Python
python连接oracle数据库实例
Oct 17 Python
python中异常报错处理方法汇总
Nov 20 Python
python中实现k-means聚类算法详解
Nov 11 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
Python正则表达式急速入门(小结)
Dec 16 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
python numpy实现rolling滚动案例
Jun 08 Python
浅谈Python数学建模之整数规划
Jun 23 Python
python unittest单元测试的步骤分析
Aug 02 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实现的简单压缩英文字符串的代码
2008/04/24 PHP
PHP 多维数组排序实现代码
2009/08/05 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
Array对象方法参考
2006/10/03 Javascript
js 获取服务器控件值的代码
2010/03/05 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
python错误处理详解
2014/09/28 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
python标记语句块使用方法总结
2019/08/05 Python
python实现视频读取和转化图片
2019/12/10 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
入党转预备思想汇报
2014/01/07 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
家长给老师的感谢信
2015/01/20 职场文书
教师个人发展总结
2015/02/11 职场文书