<LeetCode天梯>Day013 有效的数独(直接判断法) | 初级算法 | Python

举报
府学路18号车神 发表于 2022/05/11 15:55:51 2022/05/11
【摘要】 周天周天周天,xdm,本周也是这个月最后一天啦,明今晚上大家是不是得清空一波购物车呀!白天先来学习一波吧,疫情依旧反复,大家带好口罩啊~ 继续继续,来,今天和车神哥一起来提升自己的Python编程和面试能力吧,刷天梯~以下为我的天梯积分规则:每日至少一题:一题积分+10分 若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)若做了三道以上,则从第三题开始算+20分(如:做了三...

周天周天周天,xdm,本周也是这个月最后一天啦,明今晚上大家是不是得清空一波购物车呀!白天先来学习一波吧,疫情依旧反复,大家带好口罩啊~ 继续继续,来,今天和车神哥一起来提升自己的Python编程和面试能力吧,刷天梯~

以下为我的天梯积分规则

每日至少一题:一题积分+10分
若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)
若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60


初始分为100分
若差一天没做题,则扣积分-10分(周六、周日除外注:休息
坚持!!!


初级算法

刷题目录

数组

在这里插入图片描述

题干

请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。

  1. 数字 1-9 在每一行只能出现一次
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)

数独部分空格内已填入了数字,空白格用 ‘.’ 表示。

注意:

  • 一个有效的数独(部分已被填充)不一定是可解的。
  • 只需要根据以上规则,验证已经填入的数字是否有效即可。

示例1

在这里插入图片描述
在这里插入图片描述
示例2
在这里插入图片描述


直接判断法

分析:

我们需要查找再某行或某列及其3*3的宫内有无相同的数字,如果满足条件,则返回true;相反,则返回false.
本题难度中等

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
	res = True  # 默认输出True
	        # 判断行
	        for i in range(len(board)):
	            dotCount = board[i].count('.')  # 得到每一行中“.”的个数
	            rightCount = len(board[i]) - dotCount + 1  # 得到每一行中真实数字的数
	            judgeCount = len(set(board[i]))      # 得到集合每一行的元素个数,由于set()会直接将多余的或者说相同的数,记为一个数,如:6,6,4,6,3. 输出得到的长度为3,而不是5,意思三个6,只保留一个6;且会从小到大,排序
	            if rightCount != judgeCount:      # 判断两者的长度是否一直,若不一直则赋值FALSE
	                res = False
	        # 判断列
	        for i in range(len(board[0])):
	            l = []    # 设置空数组存储
	            for j in range(len(board)):
	                l.append(board[j][i])       # 将每列元素存入临时数组中
	            dotCount = l.count('.')         # 计算“.”的个数
	            rightCount = len(board[0]) - dotCount + 1       # 得到每一列中数字的个数
	            judgeCount = len(set(l))        # 得到集合l的长度
	            if rightCount != judgeCount:
	                res = False
	        # 判断3*3宫内是否重复
	        for i in range(0, len(board), 3):
	            for j in range(0, len(board[0]), 3):
	                m = []
	                for k in range(i, i+3):
	                    for z in range(j, j+3):
	                        m.append(board[k][z])
	                dotCount = m.count('.')
	                rightCount = len(m) - dotCount + 1
	                judgeCount = len(set(m))
	                if rightCount != judgeCount:
	                    res = False
	        return res

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

确实有些难度,慢慢来~

References

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2jrse/
来源:力扣(LeetCode)


今日得分:+10
总得分:320

加油!!!

❤坚持读Paper,坚持做笔记,坚持学习,坚持刷力扣LeetCode❤!!!
坚持刷题!!!打天梯!!!
To Be No.1

⚡⚡


创作不易⚡,过路能❤关注收藏点个赞三连就最好不过了

ღ( ´・ᴗ・` )


你现在的气质里,藏着你走过的路,读过的书和爱过的人。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。