顺时针打印矩阵:掌握这个技巧,面试再也不怕数组题!

B站影视 日本电影 2025-08-10 15:40 2

摘要:在编程面试中,数组操作题一直是热门考点,而顺时针打印矩阵更是其中的经典难题。很多人遇到这类题会手足无措,其实只要掌握了"层层剥离"的思路,就能轻松解决。今天我们就来手把手教你如何顺时针打印矩阵,还会附赠代码实现,让你看完就能上手!

在编程面试中,数组操作题一直是热门考点,而顺时针打印矩阵更是其中的经典难题。很多人遇到这类题会手足无措,其实只要掌握了"层层剥离"的思路,就能轻松解决。今天我们就来手把手教你如何顺时针打印矩阵,还会附赠代码实现,让你看完就能上手!

先来看一个例子: 如果输入这样一个4×4矩阵:

1 2 3 45 6 7 89 10 11 1213 14 15 16

顺时针打印的结果就是:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10

简单说,就是按照"从左到右→从上到下→从右到左→从下到上"的顺序,一层一层地打印矩阵元素,直到所有元素都被打印出来。

解决这个问题的关键是确定每一层的边界,通过不断收缩边界来控制遍历范围。具体步骤如下:

定义边界变量:left:当前层左边界(初始为0)right:当前层右边界(初始为列数-1)top:当前层上边界(初始为0)bottom:当前层下边界(初始为行数-1)按顺时针顺序遍历当前层:从左到右:遍历top行,从left到right从上到下:遍历right列,从top+1到bottom(注意+1避免重复)从右到左:如果当前层不是单行(top≠bottom),遍历bottom行,从right-1到left从下到上:如果当前层不是单列(left≠right),遍历left列,从bottom-1到top+1收缩边界:完成一层遍历后,left++、top++、right--、bottom--,继续下一层遍历,直到left>right或top>bottom时停止。#include using namespace std;class Solution {public:vector printMatrix(vector> matrix) {// 获取矩阵行数和列数int rows = matrix.size;int cols = matrix[0].size;vector result;// 边界条件:空矩阵直接返回if (rows == 0 || cols == 0) {return result;}// 初始化边界变量int left = 0, right = cols - 1;int top = 0, bottom = rows - 1;while (left = left; --i) {result.push_back(matrix[bottom][i]);}}// 4. 从下到上遍历左边界列(仅当不是单列时)if (left != right) {for (int i = bottom - 1; i > top; --i) {result.push_back(matrix[i][left]);}}// 收缩边界,准备遍历下一层left++;top++;right--;bottom--;}return result;}};# -*- coding:utf-8 -*-class Solution:# matrix为二维列表,返回打印结果列表def printMatrix(self, matrix):# 获取矩阵行数和列数rows = len(matrix)cols = len(matrix[0]) if rows > 0 else 0result = # 边界条件:空矩阵直接返回if rows == 0 or cols == 0:return result# 初始化边界变量left, right = 0, cols - 1top, bottom = 0, rows - 1while left

掌握了顺时针打印的思路后,我们还可以解决它的"反向问题"——顺时针填充矩阵。例如,给定数字n,填充一个n×n的矩阵,数字从1开始按顺时针顺序排列。

以n=4为例,填充结果为:

1 2 3 412 13 14 511 16 15 610 9 8 7

实现代码(Python):

# -*- coding:utf-8 -*-def fillMatrix(n):# 初始化n×n的矩阵,元素均为0matrix = [[0 for _ in range(n)] for _ in range(n)]# 总共需要填充n²个数字total = n * ncurrent = 1 # 当前要填充的数字# 初始化边界变量left, right = 0, n - 1top, bottom = 0, n - 1while left

顺时针打印矩阵的核心是通过边界控制遍历范围,记住"从左到右→从上到下→从右到左→从下到上"的顺序,以及"收缩边界"的技巧,就能轻松应对这类问题。无论是打印还是填充矩阵,思路都是相通的,掌握后可以举一反三。

如果你觉得这篇文章有用,欢迎点赞收藏,也可以在评论区分享你的解题思路哦!

来源:码农世界

相关推荐