131:螺旋矩阵II

LeetCode 59 https://leetcode.cn/problems/spiral-matrix-ii/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 初始化一个 n×n 的矩阵,一开始所有元素均为 0。 用一个长为 4 的方向数组 DIRS=[(0,1),(1,0),(0,−1),(−1,0)] 分别表示右下左上 4 个方向。同时用一个下标 di 表示当前方向,初始值为 0,表示一开始向右。 每次移动,相当于把行号增加 DIRS[di][0],把列号增加 DIRS[di][1]。 向右转 90°,相当于把 di 增加 1,但在 di=3 时要回到 di=0。两种情况合二为一,把 di 更新为 (di+1)mod4。 时间复杂度:\(O(n^2)\)。 空间复杂度:O(1)。返回值不计入。 ...

七月 15, 2025 · Cassius

127:整数反转

LeetCode 7 https://leetcode.cn/problems/reverse-integer/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 模拟即可。需要判断答案是否会溢出,如果会溢出直接返回 0。 时间复杂度:O(log∣x∣)。翻转的次数即 x 十进制的位数。 空间复杂度:O(1)。 ...

七月 15, 2025 · Cassius

118:对角线遍历

LeetCode 498 https://leetcode.cn/problems/diagonal-traverse/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 模拟对角线遍历,当到达边界的时候需要改变方向。需要注意的是在判断边界时有顺序要求,例如向上移动时,需要先处理右边界,再处理上边界。这是因为如果当同时到达右边界和上边界时,如果处理上边界,col 就越界了。 时间复杂度:O(m×n),其中 m 为矩阵行的数量,n 为矩阵列的数量。需要遍历一遍矩阵中的所有元素,需要的时间复杂度为 O(m×n)。 空间复杂度:O(1)。除返回值外不需要额外的空间。 ...

七月 15, 2025 · Cassius

101:验证IP地址

LeetCode 468 https://leetcode.cn/problems/validate-ip-address/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 模拟题。 我们首先查找给定的字符串 queryIP 中是否包含符号 ‘.’。如果包含,那么我们需要判断其是否为 IPv4 地址;如果不包含,我们则判断其是否为 IPv6 地址。 对于 IPv4 地址而言,它包含 4 个部分,用 ‘.’ 隔开。因此我们可以存储相邻两个 ‘.’ 出现的位置 last 和 cur(当考虑首个部分时,last=−1;当考虑最后一个部分时,cur=n,其中 n 是字符串的长度),那么子串 queryIP[last+1..cur−1] 就对应着一个部分。我们需要判断: 它的长度是否在 [1,3] 之间(虽然这一步没有显式要求,但提前判断可以防止后续计算值时 32 位整数无法表示的情况); 它是否只包含数字; 它的值是否在 [0,255] 之间; 它是否不包含前导零。具体地,如果它的值为 0,那么该部分只能包含一个 0,即 (cur−1)−(last+1)+1=1;如果它的值不为 0,那么该部分的第一个数字不能为 0,即 queryIP[last+1] 不为 0。 对于 IPv6 地址而言,它包含 8 个部分,用 ‘:’ 隔开。同样地,我们可以存储相邻两个 ‘:’ 出现的位置 last 和 cur,那么子串 queryIP[last+1..cur−1] 就对应着一个部分。我们需要判断: 它的长度是否在 [1,4] 之间; 它是否只包含数字,或者 a-f,或者 A-F; 除了上述情况以外,如果我们无法找到对应数量的部分,那么给定的字符串也不是一个有效的 IP 地址。 时间复杂度:O(n),其中 n 是字符串 queryIP 的长度。我们只需要遍历字符串常数次。 空间复杂度:O(1)。 ...

七月 13, 2025 · Cassius

054:字符串相乘

LeetCode 43 https://leetcode.cn/problems/multiply-strings/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 高精度乘法,模拟竖式计算。 为了方便处理进位,先用一个倒序的 int 类型数组来存储计算结果,最后再将结果转回字符串。 数组的长度初始化为 m + n,如果最高位为 0,则将长度减一。 时间复杂度:O(mn)。 空间复杂度:O(m+n)。 ...

七月 2, 2025 · Cassius

050:字符串转换整数

LeetCode 8 https://leetcode.cn/problems/string-to-integer-atoi/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 本题是一道比较麻烦的模拟。 跳过前导空格。 检查符号。 读入数字。需要注意检查溢出。32 位 int 的范围是 [-2147483648, 2147483647]。无论是正数还是负数,只要绝对值大于 2147483647,我们就返回 INT_MAX/INT_MIN。对于正数是已经溢出,对于负数则正好是 INT_MIN。判断方式是 ans > INT_MAX / 10 || (ans == INT_MAX / 10 && s[i] > ‘7’)。 时间复杂度:O(n)。 空间复杂度:O(1)。 ...

七月 1, 2025 · Cassius

027:字符串相加

LeetCode 415 https://leetcode.cn/problems/add-strings/description/ 难度:简单 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 本题为高精度加法。使用两个指针倒序遍历 num1 和 num2,最后处理有进位的情况。将 ans 反转后就是答案。 时间复杂度:O(max(m, n))。 空间复杂度:O(1)。 ...

六月 29, 2025 · Cassius

023:螺旋矩阵

LeetCode 54 https://leetcode.cn/problems/spiral-matrix/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 对于已经访问过的数据,更改值为 INF,对其进行标记。定义方向数组,当访问到不合法的节点时,右转 90°,即 di = (di + 1) % 4。 时间复杂度:O(mn),其中 m 和 n 分别为 matrix 的行数和列数。 空间复杂度:O(1)。返回值不计入。 ...

六月 29, 2025 · Cassius