<LeetCode天梯>Day013 有效的数独(直接判断法) | 初级算法 | Python
周天周天周天,xdm,本周也是这个月最后一天啦,明今晚上大家是不是得清空一波购物车呀!白天先来学习一波吧,疫情依旧反复,大家带好口罩啊~ 继续继续,来,今天和车神哥一起来提升自己的Python编程和面试能力吧,刷天梯~
以下为我的天梯积分规则:
每日至少一题:一题积分+10分
若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)
若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)
初始分为100分
若差一天没做题,则扣积分-10分(周六、周日除外注:休息)
坚持!!!
初级算法
刷题目录
数组
题干
请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
- 数字 1-9 在每一行只能出现一次
- 数字 1-9 在每一列只能出现一次。
- 数字 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⚡⚡哈哈哈哈
⚡创作不易⚡,过路能❤关注、收藏、点个赞❤三连就最好不过了
ღ( ´・ᴗ・` )
❤
『
你现在的气质里,藏着你走过的路,读过的书和爱过的人。
』
- 点赞
- 收藏
- 关注作者
评论(0)