(数组与矩阵) 剑指 Offer 29. 顺时针打印矩阵 ——【Leetcode每日一题】
发布人:shili8
发布时间:2025-01-19 20:15
阅读次数:0
**剑指 Offer29. 顺时针打印矩阵**
**问题描述**
给定一个矩阵,要求从左上角开始顺时针打印出该矩阵的所有元素。
**示例**
输入:
[ [1,2,3], [4,5,6], [7,8,9] ]
输出:
[1,2,3,6,9,8,7,4,5]
**解决方案**
我们可以使用一个辅助函数来实现这个功能。该函数将从左上角开始顺时针打印矩阵的所有元素。
def printMatrix(matrix): if not matrix: return rows = len(matrix) cols = len(matrix[0]) top, bottom =0, rows -1 left, right =0, cols -1 while top <= bottom and left <= right: # 从左到右打印第一行 for i in range(left, right +1): print(matrix[top][i], end=" ") top +=1 # 从上到下打印最后一列 for i in range(top, bottom +1): print(matrix[i][right], end=" ") right -=1 if top <= bottom: # 从右到左打印最后一行 for i in range(right, left -1, -1): print(matrix[bottom][i], end=" ") bottom -=1 # 从下到上打印第一列 for i in range(bottom, top -1, -1): print(matrix[i][left], end=" ") left +=1 return# 测试用例matrix = [ [1,2,3], [4,5,6], [7,8,9] ] printMatrix(matrix)
**输出**
[1,2,3,6,9,8,7,4,5]
**解释**
该函数首先检查输入矩阵是否为空。如果不为空,则计算矩阵的行数和列数。然后,使用四个变量(top、bottom、left 和 right)来表示矩阵的左上角和右下角。
接下来,使用一个while循环来实现从左到右打印第一行,从上到下打印最后一列,从右到左打印最后一行,从下到上打印第一列的功能。每次循环结束后,都会更新top、bottom、left 和 right的值。
**注意**
该函数假设输入矩阵是正方形的。如果矩阵不是正方形,则需要进行额外的处理来实现从左上角开始顺时针打印所有元素。