LeetCode 54. 螺旋矩阵 超详细题解 文章目录题目描述与示例问题分析与易错点剖析核心解题思路边界法最终AC无BUG代码代码逐行精讲多测试用例验证复杂度分析常见坑点总结面试答题技巧LeetCode 54. 螺旋矩阵必看经典题边界防错完整版大家好这是一道面试高频手撕原题属于数组/矩阵经典模拟题看似简单极易踩坑。本文带来边界安全、无重复、无越界的满分代码彻底解决螺旋矩阵遍历的各类异常问题适合刷题、面试直接套用。题目描述给你一个m行n列的矩阵matrix请按照顺时针螺旋顺序依次返回矩阵中的所有元素按遍历顺序存入列表并返回。示例 1输入matrix [[1,2,3],[4,5,6],[7,8,9]] 输出[1,2,3,6,9,8,7,4,5]示例 2输入matrix [[1]] 输出[1]提示m matrix.lengthn matrix[i].length1 m, n 10-100 matrix[i][j] 100问题分析必懂易错点螺旋矩阵最常见的错误集中在边界越界、元素重复添加尤其在以下场景极易出错矩阵只剩最后一个元素单行矩阵、单列矩阵遍历收尾阶段边界失控根本原因完成上边界从左到右遍历后执行了top 1操作此时可能已经满足top bottom说明已经没有剩余元素。如果代码不做判断继续执行向下、向左、向上遍历就会导致重复添加、数组越界、结果错乱。核心判断规则向右遍历完 → 上边界下移向下遍历前 → 必须校验top bottom还有未遍历行向左遍历前 → 必须校验top bottom and left right向上遍历前 → 必须校验top bottom and left right核心解题思路四边界法采用边界收缩法定义上下左右四个边界按顺时针方向依次遍历四条边每遍历完一条边就收缩对应边界直到所有元素遍历完成。左→右遍历上边界遍历完成上边界下移上→下遍历右边界遍历完成右边界左移右→左遍历下边界遍历完成下边界上移下→上遍历左边界遍历完成左边界右移每一步切换方向前都要做边界校验杜绝越界与重复。最终AC代码无bug、边界安全from typing import List class Solution: def spiralOrder(self, matrix: List[List[int]]) - List[int]: # 处理空矩阵特殊情况避免报错 if not matrix or not matrix[0]: return [] # 初始化四条边界 top, bottom 0, len(matrix) - 1 left, right 0, len(matrix[0]) - 1 # 结果列表存储遍历元素 res [] # 循环条件仍有未遍历的行和列 while top bottom and left right: # 1. 从左到右遍历上边界 for col in range(left, right 1): res.append(matrix[top][col]) top 1 # 上边界向下收缩 # 2. 从上到下遍历右边界先判断是否有剩余行 if top bottom: for row in range(top, bottom 1): res.append(matrix[row][right]) right - 1 # 右边界向左收缩 # 3. 从右到左遍历下边界同时校验行和列 if top bottom and left right: for col in range(right, left - 1, -1): res.append(matrix[bottom][col]) bottom - 1 # 下边界向上收缩 # 4. 从下到上遍历左边界同时校验行和列 if top bottom and left right: for row in range(bottom, top - 1, -1): res.append(matrix[row][left]) left 1 # 左边界向右收缩 return res代码逐行精讲1. 特殊情况处理先判断矩阵是否为空或矩阵行是否为空提前返回空列表防止后续代码出现索引报错。2. 边界变量定义top上边界初始值为第一行行号0bottom下边界初始值为最后一行行号left左边界初始值为第一列列号0right右边界初始值为最后一列列号3. 顺时针四步遍历左→右上边界遍历完成后上边界向下移动一行上→下右边界必须先校验行边界避免空行遍历右→左下边界双重校验确保行列都有剩余元素下→上左边界双重校验最后收缩左边界进入下一轮循环4. 关键校验逻辑向右遍历由外层循环保证安全其余三个方向必须额外校验这是代码无BUG、不重复、不越界的核心。测试用例验证全覆盖用例1标准3×3矩阵matrix [[1,2,3],[4,5,6],[7,8,9]] print(Solution().spiralOrder(matrix)) # 输出[1,2,3,6,9,8,7,4,5]用例2单个元素最易出错matrix [[1]] # 输出[1] 无重复添加无越界用例3单行矩阵matrix [[1,2,3]] # 输出[1,2,3]用例4单列矩阵matrix [[1],[2],[3]] # 输出[1,2,3]用例5非方阵2×3matrix [[1,2,3],[4,5,6]] # 输出[1,2,3,6,5,4]复杂度分析时间复杂度O(m×n)矩阵中每个元素仅被遍历一次无重复操作空间复杂度O(1)除结果列表外仅使用常数个临时变量无额外开辟空间常见坑点总结螺旋矩阵高频坑点忘记处理空矩阵直接运行导致索引报错不做边界校验导致重复添加最后一个元素边界收缩顺序错误遍历方向混乱逆序遍历右→左、下→上步长写错遗漏元素面试答题技巧先说明四边界法思路讲清顺时针遍历顺序重点强调边界校验体现严谨性手写代码时注释关键校验步骤提前测试单行、单列、单个元素用例总结一句牢记螺旋矩阵写法口诀四边循环方向依次每步校验收缩边界。本文代码为面试标准答案版无任何BUG可直接背诵、直接提交AC适合LeetCode刷题、笔试、面试手撕。相关推荐LeetCode 59. 螺旋矩阵 II同款边界法生成螺旋矩阵
LeetCode 54. 螺旋矩阵 超详细题解(无BUG边界安全版)
LeetCode 54. 螺旋矩阵 超详细题解 文章目录题目描述与示例问题分析与易错点剖析核心解题思路边界法最终AC无BUG代码代码逐行精讲多测试用例验证复杂度分析常见坑点总结面试答题技巧LeetCode 54. 螺旋矩阵必看经典题边界防错完整版大家好这是一道面试高频手撕原题属于数组/矩阵经典模拟题看似简单极易踩坑。本文带来边界安全、无重复、无越界的满分代码彻底解决螺旋矩阵遍历的各类异常问题适合刷题、面试直接套用。题目描述给你一个m行n列的矩阵matrix请按照顺时针螺旋顺序依次返回矩阵中的所有元素按遍历顺序存入列表并返回。示例 1输入matrix [[1,2,3],[4,5,6],[7,8,9]] 输出[1,2,3,6,9,8,7,4,5]示例 2输入matrix [[1]] 输出[1]提示m matrix.lengthn matrix[i].length1 m, n 10-100 matrix[i][j] 100问题分析必懂易错点螺旋矩阵最常见的错误集中在边界越界、元素重复添加尤其在以下场景极易出错矩阵只剩最后一个元素单行矩阵、单列矩阵遍历收尾阶段边界失控根本原因完成上边界从左到右遍历后执行了top 1操作此时可能已经满足top bottom说明已经没有剩余元素。如果代码不做判断继续执行向下、向左、向上遍历就会导致重复添加、数组越界、结果错乱。核心判断规则向右遍历完 → 上边界下移向下遍历前 → 必须校验top bottom还有未遍历行向左遍历前 → 必须校验top bottom and left right向上遍历前 → 必须校验top bottom and left right核心解题思路四边界法采用边界收缩法定义上下左右四个边界按顺时针方向依次遍历四条边每遍历完一条边就收缩对应边界直到所有元素遍历完成。左→右遍历上边界遍历完成上边界下移上→下遍历右边界遍历完成右边界左移右→左遍历下边界遍历完成下边界上移下→上遍历左边界遍历完成左边界右移每一步切换方向前都要做边界校验杜绝越界与重复。最终AC代码无bug、边界安全from typing import List class Solution: def spiralOrder(self, matrix: List[List[int]]) - List[int]: # 处理空矩阵特殊情况避免报错 if not matrix or not matrix[0]: return [] # 初始化四条边界 top, bottom 0, len(matrix) - 1 left, right 0, len(matrix[0]) - 1 # 结果列表存储遍历元素 res [] # 循环条件仍有未遍历的行和列 while top bottom and left right: # 1. 从左到右遍历上边界 for col in range(left, right 1): res.append(matrix[top][col]) top 1 # 上边界向下收缩 # 2. 从上到下遍历右边界先判断是否有剩余行 if top bottom: for row in range(top, bottom 1): res.append(matrix[row][right]) right - 1 # 右边界向左收缩 # 3. 从右到左遍历下边界同时校验行和列 if top bottom and left right: for col in range(right, left - 1, -1): res.append(matrix[bottom][col]) bottom - 1 # 下边界向上收缩 # 4. 从下到上遍历左边界同时校验行和列 if top bottom and left right: for row in range(bottom, top - 1, -1): res.append(matrix[row][left]) left 1 # 左边界向右收缩 return res代码逐行精讲1. 特殊情况处理先判断矩阵是否为空或矩阵行是否为空提前返回空列表防止后续代码出现索引报错。2. 边界变量定义top上边界初始值为第一行行号0bottom下边界初始值为最后一行行号left左边界初始值为第一列列号0right右边界初始值为最后一列列号3. 顺时针四步遍历左→右上边界遍历完成后上边界向下移动一行上→下右边界必须先校验行边界避免空行遍历右→左下边界双重校验确保行列都有剩余元素下→上左边界双重校验最后收缩左边界进入下一轮循环4. 关键校验逻辑向右遍历由外层循环保证安全其余三个方向必须额外校验这是代码无BUG、不重复、不越界的核心。测试用例验证全覆盖用例1标准3×3矩阵matrix [[1,2,3],[4,5,6],[7,8,9]] print(Solution().spiralOrder(matrix)) # 输出[1,2,3,6,9,8,7,4,5]用例2单个元素最易出错matrix [[1]] # 输出[1] 无重复添加无越界用例3单行矩阵matrix [[1,2,3]] # 输出[1,2,3]用例4单列矩阵matrix [[1],[2],[3]] # 输出[1,2,3]用例5非方阵2×3matrix [[1,2,3],[4,5,6]] # 输出[1,2,3,6,5,4]复杂度分析时间复杂度O(m×n)矩阵中每个元素仅被遍历一次无重复操作空间复杂度O(1)除结果列表外仅使用常数个临时变量无额外开辟空间常见坑点总结螺旋矩阵高频坑点忘记处理空矩阵直接运行导致索引报错不做边界校验导致重复添加最后一个元素边界收缩顺序错误遍历方向混乱逆序遍历右→左、下→上步长写错遗漏元素面试答题技巧先说明四边界法思路讲清顺时针遍历顺序重点强调边界校验体现严谨性手写代码时注释关键校验步骤提前测试单行、单列、单个元素用例总结一句牢记螺旋矩阵写法口诀四边循环方向依次每步校验收缩边界。本文代码为面试标准答案版无任何BUG可直接背诵、直接提交AC适合LeetCode刷题、笔试、面试手撕。相关推荐LeetCode 59. 螺旋矩阵 II同款边界法生成螺旋矩阵