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

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

以下为我的天梯积分规则:


每日至少一题:一题积分+10分

若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)

若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)


初始分为100分

若差一天没做题,则扣积分-10分(周六、周日除外注:休息)

坚持!!!


初级算法

刷题目录

数组


image.png

image.png

题干

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


数字 1-9 在每一行只能出现一次

数字 1-9 在每一列只能出现一次。

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

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


注意:


一个有效的数独(部分已被填充)不一定是可解的。

只需要根据以上规则,验证已经填入的数字是否有效即可。

示例1:

image.png

image.png

示例2

image.png

直接判断法

分析:

我们需要查找再某行或某列及其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

image.png

image.png

image.png



相关文章
|
8天前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
119 0
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
323 2
|
11月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
251 4
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
202 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
存储 算法 C++
Leetcode第三十六题(有效的数独)
这篇文章介绍了如何使用C++编写一个算法来验证一个9x9数独是否有效,遵循数独的规则,即数字1-9在每一行、每一列和每个3x3宫内只能出现一次。
130 0
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
162 6
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
161 2
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
170 1
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
181 1

热门文章

最新文章

推荐镜像

更多