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通过websocket与js客户端通信示例分析
Jun 25 Python
python输出当前目录下index.html文件路径的方法
Apr 28 Python
python虚拟环境virtualenv的使用教程
Oct 20 Python
详解如何使用Python编写vim插件
Nov 28 Python
python 利用栈和队列模拟递归的过程
May 29 Python
使用Python opencv实现视频与图片的相互转换
Jul 08 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
python修改文件内容的3种方法详解
Nov 15 Python
python如何使用Redis构建分布式锁
Jan 16 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
python使用smtplib模块发送邮件
Dec 17 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
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
Python对象与引用的介绍
2019/01/24 Python
浅析Python3 pip换源问题
2020/01/06 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
Python项目跨域问题解决方案
2020/06/22 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
小学生元旦广播稿
2014/02/21 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python