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 相关文章推荐
Python3 正在毁灭 Python的原因分析
Nov 28 Python
在Python中使用HTML模版的教程
Apr 29 Python
Python基于checksum计算文件是否相同的方法
Jul 09 Python
用Python编写简单的微博爬虫
Mar 04 Python
python导出hive数据表的schema实例代码
Jan 22 Python
python使用matplotlib库生成随机漫步图
Aug 27 Python
详解【python】str与json类型转换
Apr 29 Python
python实现五子棋小程序
Jun 18 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
python实现图片,视频人脸识别(opencv版)
Nov 18 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 Python
利用Matlab绘制各类特殊图形的实例代码
Jul 16 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
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
深入解析php之apc
2013/05/15 PHP
PHP取二进制文件头快速判断文件类型的实现代码
2013/08/05 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
Python版微信红包分配算法
2015/05/04 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
大学迎新生标语
2014/10/06 职场文书
试用期自我评价范文
2015/03/10 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
浅谈Redis的几个过期策略
2021/05/27 Redis
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
MongoDB数据库之添删改查
2022/04/26 MongoDB