[python 刷题] 36 Valid Sudoku

[python 刷题] 36 Valid Sudoku

题目:

Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

  1. Each row must contain the digits 1-9 without repetition.

  2. Each column must contain the digits 1-9 without repetition.

  3. Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.

Note:

  • A Sudoku board (partially filled) could be valid but is not necessarily solvable.

  • Only the filled cells need to be validated according to the mentioned rules.

这道题解数独,其实还是比较简单的,只是验证当前板子上有的数字能否构成一个合法的数独,而一个合法的数独就是每行、每列、每个 2 x 3 的盒子里都只能有不重复的 1-9,按照这个逻辑硬写就行

因为空间大小就是 9 x 9,所以不管怎么跑时间和空间复杂度都是 O ( 1 ) O(1) O(1),非常丑陋的解法:

class Solution:def isValidSudoku(self, board: List[List[str]]) -> bool:# a valid sodoku needs to have unique value on# each row# each col# each 3x3# check each rowfor i in range(9):hashset = set()for j in range(9):if board[i][j] in hashset and board[i][j] != '.':return Falsehashset.add(board[i][j])# check each colfor i in range(9):hashset = set()for j in range(9):if board[j][i] in hashset and board[j][i] != '.':return Falsehashset.add(board[j][i])# check 3x3for i in range(0, 9, 3):for j in range(0, 9, 3):hashset = set()if board[i][j] in hashset and board[i][j] != '.':return Falsehashset.add(board[i][j])if board[i + 1][j] in hashset and board[i + 1][j] != '.':return Falsehashset.add(board[i + 1][j])if board[i + 2][j] in hashset and board[i + 2][j] != '.':return Falsehashset.add(board[i + 2][j])if board[i][j + 1] in hashset and board[i][j + 1] != '.':return Falsehashset.add(board[i][j + 1])if board[i + 1][j + 1] in hashset and board[i + 1][j + 1] != '.':return Falsehashset.add(board[i + 1][j + 1])if board[i + 2][j + 1] in hashset and board[i + 2][j + 1] != '.':return Falsehashset.add(board[i + 2][j + 1])if board[i][j + 2] in hashset and board[i][j+ 2] != '.':return Falsehashset.add(board[i][j])if board[i + 1][j + 2] in hashset and board[i + 1][j + 2] != '.':return Falsehashset.add(board[i + 1][j])if board[i + 2][j + 2] in hashset and board[i + 2][j + 2] != '.':return Falsehashset.add(board[i + 2][j + 2])return True

其实就是硬解,反正能写完就行

这里提供另外两个稍微好一点的写法,一个是使用几个 helper function:

class Solution:def valid_rows(self, board: List[List[str]]) -> bool:# return if each row is a valid Sudokureturn Truedef valid_cols(self, board: List[List[str]]) -> bool:# return if each col is a valid Sudokureturn Truedef valid_three_by_three(self,board: List[List[str]], i: int, j: int) -> bool:# return if each 3x3 is a valid Sodukufor r in range(i, i + 1, 3):for c in range(0, i + 1, 3):return Truedef valid_nine(self, board: List[List[str]]) -> bool:# return if the entire board can be divide into 9 valid 3x3for r in range(0, 9, 3):for c in range(0, 9, 3):if not valid_three_by_three(r, c):return Falsereturn Truedef isValidSudoku(self, board: List[List[str]]) -> bool:return self.valid_rows(board) and self.valid_cols(board) and self.valid_nine(board)

没有写完,因为最后的I写法更好一些

就是用 dict 的写法,这个写法应该是最简洁的了,用 row+col 的组合作为 key,只写一重遍历:

class Solution:def isValidSudoku(self, board: List[List[str]]) -> bool:cols = collections.defaultdict(set)rows = collections.defaultdict(set)squares = collections.defaultdict(set)  # key = (r /3, c /3)for r in range(9):for c in range(9):num = board[r][c]if num == ".":continueif (num in rows[r]or num in cols[c]or num in squares[(r // 3, c // 3)]):return Falsecols[c].add(num)rows[r].add(num)squares[(r // 3, c // 3)].add(num)return True

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/83021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW开发航天器模拟器的姿态控制和反作用轮动量管理

LabVIEW开发航天器模拟器的姿态控制和反作用轮动量管理 在过去十年中,航天器一直是现代技术进步的先决条件。迄今为止,为了更好地完成各种实际任务,已经在航天器姿态控制领域进行了大量研究。航天器一旦进入太空,就容易出现不确定…

CSS

CSS CSS是什么 层叠样式表 (Cascading Style Sheets).CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结构分离.说白了就是让网页变得好看 什么是样式呢? 大小,位置,间距,颜色&a…

银行发展绿色金融,8条建议为您指路

在《财富潮涌:银行发展绿色经济创新路径》内容中,我们带大家了解了商业银行有关绿色财富、绿色服务及绿色运营的内容。今天,我们将阐述商业银行发展绿色金融的必要性以及在实践中商业银行应该如何发展色金融。 发展绿色金融的必要性与难点 1.…

国家开放大学考试难度如何

国家开放大学面相的学生群体主要是广大在职在岗员工和社会人士,所以国开的考试难度可以用“宽入宽出”四个字形容。 所谓的“宽入”指的是招生条件非常宽松,虽然有入学考试,但是所涉及的内容十分简单。 所谓的“宽出”指的是毕业条件非常简单…

可扩展性对物联网管理系统有哪些影响?

可扩展性对于物联网管理系统的设计和开发非常重要,它直接影响着系统的性能、可靠性和能耗等方面,是评估一个系统优劣的重要因素之一。可扩展性对物联网管理系统的影响主要体现在以下几个方面: 设备兼容性:物联网管理系统的可扩展性…

华为杯数学建模比赛经验分享

再过一周左右,第二十届华为杯数学建模比赛就要开赛了,所以今天分享一下个人数学建模比赛的经验。 今天给大家分享一期关于华为杯数学建模比赛的经验分享,我将从以下三个方面展开说明: (1)如何准备数学建模比赛&#x…

互联网摸鱼日报(2023-09-19)

互联网摸鱼日报(2023-09-19) 36氪新闻 基于月度2万份睡眠报告大数据分析 慕思发布“潮汐”算法 极兔聆讯在即,中国邮政这一公司IPO获准5月难招股? “新中式”尸骨未寒,烘焙新风口已抵达战场 车企价格战杀疯了,特斯拉最高降15万…

Interceptor的使用场景:拦截请求中的租户信息,注入到租户上下文中

业务场景 在SaaS环境中,租户是最重要的隔离业务数据的属性了,在自己的项目体系环境中,租户id能保证有值。但有个特殊场景,某些特殊权限的账号需要修改指定租户的内容,也即前端会携带租户信息过来,并且内部涉…

共享单车场景下Cat.1网络表现如何?测试结果来了

为帮助行业客户提高Cat.1产品稳定性,近期,天翼物联组织终端客户郑州威科姆科技股份有限公司开展基于中国电信 Cat.1网络下的共享单车体验测试,内容涵盖单车实时位置监控、单车在线率、业务数据延迟、语音播报功能等。测试结果表明&#xff0c…

零基础学前端(四)1. 重点讲解 CSS:盒子模型、样式选择器

1. 该篇适用于从零基础学习前端的小白 2. 初学者不懂代码得含义也要坚持模仿逐行敲代码,以身体感悟带动头脑去理解新知识 3. 初学者切忌,不要眼花缭乱,不要四处找其它文档,要坚定一个教授者的方式,将其学通透&#xff…

uni-app:通过ECharts实现数据可视化-如何引入项目

效果 引入文件位置 代码 <template><view id"myChart"></view> </template> <script> import echarts from /static/js/echarts.js // 引入文件 export default {mounted() {// 初始化EChartsconst myChart echarts.init(document…

再谈字符串

今天对字符串有了一点新的理解&#xff0c;遂再写一篇博客。 字符串取模 定义 可以参考 我之前写的博客。不再赘述。下文用长度表示。 运算 ( S c ) ≡ ( S m o d P ) c ( m o d P ) (Sc) \equiv (S \bmod P) c \pmod P (Sc)≡(SmodP)c(modP) KMP 定义 g o ( i , c )…

Android 预置应用到系统内

系统中预置QQ音乐 Android.mk LOCAL_PATH: $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE : qqmusicLOCAL_MODULE_TAGS : optional LOCAL_SRC_FILES : $(LOCAL_MODULE).apk LOCAL_MODULE_CLASS : APPSLOCAL_MODULE_SUFFIX : $(COMMON_ANDROID_PACKAGE_SUFFIX)#导入so文件…

pytest实现日志按用例输出到指定文件中

场景 执行自动化用例时&#xff0c;希望日志按用例生成一个文件&#xff0c;并且按用例所在文件生成目录&#xff0c;用例失败时便于查看日志记录 实现方式 pytest.ini文件 在pytest.ini配置文件中设置配置项&#xff08;定义日志输出级别和格式&#xff09; log_clitrue l…

中秋特辑:Java事件监听实现一个猜灯谜小游戏

众所周知&#xff0c;JavaSwing是Java中关于窗口开发的一个工具包&#xff0c;可以开发一些窗口程序&#xff0c;然后由于工具包的一些限制&#xff0c;导致Java在窗口开发商并没有太多优势&#xff08;当然也有一些第三方的工具包也很好用&#xff09;&#xff0c;不过&#x…

【卷积神经网络】ResNets 残差网络

通常来说&#xff0c;增加卷积神经网络的层数有利于提高模型的准确率&#xff0c;但是深层的神经网络也变得难以训练的&#xff0c;因为存在梯度消失与梯度爆炸问题。Microsoft 亚洲研究院的 Kaiming He 等人提出了一个残差学习框架&#xff0c;以简化对 CNN 网络的训练。通过将…

基于SpringBoot+Vue的餐饮管理系统设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

【SSM】登录和注册

框架 controller 控制层 dao 持久层 interceptor 拦截器 model 实体层 uils 工具类 service 业务层 resources 资源文件层 mapper 放编写sql语句的文件&#xff0c;与持久层的文件对应 具体代码 Controller //控制层 public class UserController { //用于调用Servic…

Linux设备驱动之gpio-keys

Linux设备驱动之gpio-keys 前两个章节介绍了Linux字符设备和platform设备的注册&#xff0c;他们都是比较基础的&#xff0c;让大家理解Linux内核的设备驱动是如何注册、使用的。但在工作中&#xff0c;个人认为完全手写一个字符设备驱动的机会比较少&#xff0c;更多的都是基…

你的第1个 Unity 游戏!!!

简介 首先新建一个方块添加重力!!!总结首先 首先,你要先打开 U n i t y Unity Unity