Python技术迷

应届生简历超华丽,985各种奖项,玩过上千Github开源项目,入职一周,最基本的要求都完成不了。。。

简历看着像开挂,实战操作像开摆。

组里新来的应届生,985本硕、竞赛奖一箩筐、Github项目星光闪闪,我一开始都怀疑是不是隔壁组偷偷挖了个天才过来。结果一上手代码,连个按钮响应都写不明白,调接口能把QA调到抑郁。

Image

产品天天在群里灵魂拷问:“这个也不会?你不是顶尖大学的吗?”我看那表情,像是买了个保时捷,结果一上路发现是手摇启动的三蹦子。

我现在有点搞不清,这到底是简历写得太艺术,还是我老了,看不懂新时代选手的操作方式了?反正HR那边是该装个显卡识别简历了,不然这GPU级别的光环,落地连Excel都跑不动,真的太费电。

【备注:文末可领最新资料】

算法题:有效的数独

今天我们要聊的正是如何通过编程来解决数独问题。

给大家介绍的是一道经典的算法题——有效的数独。

咱们得搞清楚题目要求。

有效的数独是这样的:给你一个 9x9 的二维数组,这个数组表示一个数独棋盘,其中空格用 '.' 表示,已填充的数字是 1 到 9。

我们要做的,就是判断这个数独是否有效。有效的数独,意味着以下几点:

  1. 每一行的数字 1-9 不能重复。
  2. 每一列的数字 1-9 不能重复。
  3. 每一个 3x3 的子网格内,数字 1-9 不能重复。

好,既然了解了问题的本质,咱们可以来写代码了。

考虑到题目并没有要求我们填充数独,而只是检查有效性,所以我们可以通过对每一行、每一列和每个子网格进行遍历来检查是否满足有效性条件。

我们可以通过三个 set 来分别检查行、列、3x3 子网格中的数字是否重复。

具体的思路是:对于数独中的每个非空格数字,我们分别检查这个数字是否已经出现在对应的行、列和子网格里。

如果有重复的数字,说明数独无效,直接返回 False。如果全部检查完后没有重复,说明数独是有效的。

下面是 Python 的实现:

defisValidSudoku(board):
# 创建三个列表,用来保存行、列、子网格的数字是否重复    rows = [set() for _ in range(9)]    cols = [set() for _ in range(9)]    boxes = [set() for _ in range(9)]for i in range(9):for j in range(9):            num = board[i][j]if num == '.':continue# 如果是空格,跳过# 判断当前数字是否在对应的行、列、子网格里已经存在            box_index = (i // 3) * 3 + (j // 3)  # 计算当前数字所在的3x3子网格索引if num in rows[i] or num in cols[j] or num in boxes[box_index]:returnFalse# 如果重复,直接返回 False# 将当前数字添加到对应的行、列、子网格中            rows[i].add(num)            cols[j].add(num)            boxes[box_index].add(num)returnTrue# 如果所有检查通过,返回 True

这段代码的工作原理其实很简单。我们使用了三个列表,rows、cols 和 boxes,它们分别用于存储每一行、每一列、每个 3x3 子网格中已经出现过的数字。

我们遍历整个数独棋盘,每遇到一个非空格的数字,就检查它是否已经出现在当前的行、列或子网格中。

如果出现重复,直接返回 False,否则把这个数字加入对应的集合里。

每次检查的时间复杂度是 O(1),而我们要遍历整个棋盘,因此总的时间复杂度是 O(81),也就是 O(1),这对于数独棋盘来说是非常高效的。

空间复杂度方面,我们需要额外的空间来存储行、列和子网格中的数字,所以空间复杂度是 O(1),也是常数级别的。

当然了,这道题目给出的“有效性”检查本质上是一个集合问题,我们通过利用集合的去重性质,能够非常高效地解决这个问题。

有时候大家可能会好奇,为什么要用 set 这种数据结构呢?为什么不用 list 或者其他类型的容器呢?

其实,set 之所以适合,是因为它提供了平均 O(1) 的查找和插入效率,而 list 则需要 O(n) 的查找时间,效率较低。所以在这种需要频繁检查重复的场景下,set 是最佳选择。

数独作为一种经典的逻辑推理游戏,程序员们通过算法实现它的有效性验证,既能提升编程技巧,也能享受解题的乐趣。

最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek

也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。

对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
🔥虎哥私藏精品 热门推荐🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。

资料包含了《IDEA视频教程》、《最全python面试题库》、《最全项目实战源码及视频》及《毕业设计系统源码》,总量高达650GB,全部免费领取