如何实现从矩阵右下角开始逆时针螺旋遍历的Python函数?
实现从右下角开始逆时针螺旋遍历矩阵的Python函数
spiralOrder 需求说明
实现函数spiralOrder(matrix: list[list[int]]) -> list[int],要求从矩阵的右下角元素开始,以逆时针螺旋的顺序返回所有元素。以下是具体示例:
- 输入矩阵
[[1,2,3],[4,5,6],[7,8,9]],输出[9,6,3,2,1,4,7,8,5] - 输入矩阵
[[1,2],[3,4],[5,6]],输出[6,4,2,1,3,5] - 输入一维矩阵
[3],输出[3]
解法思路
通过维护矩阵的四个边界(上、下、左、右),模拟逆时针螺旋的遍历路径:
- 初始从右下角出发,先沿右列向上遍历,完成后收缩右边界
- 接着沿上行向左遍历,完成后收缩上边界
- 然后沿左列向下遍历,完成后收缩左边界
- 最后沿下行向右遍历,完成后收缩下边界
重复上述步骤直到所有元素被收集,同时处理空矩阵、一维数组、单行/单列等特殊情况。
代码实现
def spiralOrder(matrix: list[list[int]]) -> list[int]: # 处理空矩阵或一维数组的特殊情况 if not matrix: return [] if isinstance(matrix[0], int): return matrix result = [] # 初始化四个边界 top = 0 bottom = len(matrix) - 1 left = 0 right = len(matrix[0]) - 1 while top <= bottom and left <= right: # 1. 沿右列向上遍历(从底部到顶部) for i in range(bottom, top - 1, -1): result.append(matrix[i][right]) right -= 1 if top > bottom or left > right: break # 2. 沿上行向左遍历(从右到左) for i in range(right, left - 1, -1): result.append(matrix[top][i]) top += 1 if top > bottom or left > right: break # 3. 沿左列向下遍历(从顶部到底部) for i in range(top, bottom + 1): result.append(matrix[i][left]) left += 1 if top > bottom or left > right: break # 4. 沿下行向右遍历(从左到右) for i in range(left, right + 1): result.append(matrix[bottom][i]) bottom -= 1 return result
测试验证
运行以下代码可验证结果符合预期:
# 测试示例1 print(spiralOrder([[1,2,3],[4,5,6],[7,8,9]])) # 输出: [9,6,3,2,1,4,7,8,5] # 测试示例2 print(spiralOrder([[1,2],[3,4],[5,6]])) # 输出: [6,4,2,1,3,5] # 测试示例3 print(spiralOrder([3])) # 输出: [3]
内容的提问来源于stack exchange,提问作者Hector Damian Reyes
相关产品推荐
相关产品推荐

