面试题20:顺时针打印矩阵

本文详细介绍了如何按照顺时针方向打印矩阵中的每个数字,包括算法实现、循环终止条件及打印前提条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入以下矩阵:

1  2  3  4

5  6  7  8

9  10  11  12

13  14  15  16

则依次打印出数字1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16

 1 void printMatrixClockwisely(vector< vector<int> >&numbers)
 2 {
 3     int m = numbers.size();
 4     if ( m == 0 )
 5         return ;
 6     int n = numbers[0].size();
 7     if ( n == 0 )
 8         return ;
 9     int leftTop = 0;
10     while (leftTop*2 < m && leftTop*2 < n)
11     {
12         //打印左上角元素为numbers[leftTop][leftTop]的元素
13         int endCol = n - 1 - leftTop;
14         int endRow = m - 1 -leftTop;
15         //从左到右打印一行
16         for (int j = leftTop; j <= endCol; ++j)
17             cout << numbers[leftTop][j] << ' ';
18         //从上到下打印一行
19         if (endRow > leftTop)
20         {//注意是两行,不能是两列
21         for (int i = leftTop+1; i <= endRow; ++i)
22             cout << numbers[i][endCol]<< ' ';
23         }
24         //从右到左打印一行
25         if (endRow > leftTop && endCol > leftTop )
26         {
27             for (int j = endCol-1; j >= leftTop; --j)
28                 cout << numbers[endRow][j]<< ' ';
29         }
30         //从下到上打印一行
31         if (endRow - 1 > leftTop && endCol > leftTop)
32         {
33         for (int i = endRow-1; i > leftTop; --i)
34             cout << numbers[i][leftTop]<< ' ';
35         }
36         leftTop++;
37     }
38 }

分析:该题主要有两个需要注意的地方(选取左上角(leftTop,leftTop)的一圈为分析目标):

  • 循环终止条件。通过举例分析得出leftTop*2 < m && leftTop*2 < n为循环终止条件;
  • 打印每一步的前提条件。第一步总是需要的。而第二步要求至少有两行,第三步打印的前提条件是圈内至少有两行两列,而第四步打印则要求至少有三行两列。

转载于:https://www.cnblogs.com/happygirl-zjj/p/4618021.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值