顺时针打印矩阵
来源:互联网 发布:js编程规范 编辑:程序博客网 时间:2024/05/18 13:05
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:
如果输入如下矩阵:
1 2 3 4
56 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。
看到这个问题,首先发现并没有涉及什么复杂的数据结构和算法,仅仅需要控制好循环次数和对边界值的检测,可以发现此次打印矩阵不像以往的按行按列打印,故循环不能以普通的行数列数作为边界值,但是对于顺时针打印矩阵,也可以发现其规律,就是以一圈为一个循环,发现这点就可以知道大的循环控制条件是以圈数为边界点。
根据这点可以先求出行数,列数和循环的次数(即圈数,圈数以行列中最小的值为准,1,2是一圈,3,4是两圈,5,6是三圈......依次类推,可以求出圈数)。
class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> temp; int row = matrix.size(); //行数 int column = matrix[0].size(); //列数 int circle = ((row < column ? row : column) - 1) / 2 + 1; //圈数 for (int i = 0; i < circle; ++i) { //... ... } return temp; }};当向右打印第一圈第一行时,可以发现打印的是一整行,当打印第二圈第一行时,左右各少了两个元素,依次类推,可以发现以向右打印的方向最终打印出来的都是一个倒三角结构。于是可以写出如下代码:
for (int j = i; j < column - i; ++j) {//从左向右打印temp.push_back(matrix[i][j]);}依次类推,可以发现无论是从哪个方向打印,都是一个倒三角结构,于是后续打印的代码如下://从上往下的每一列数据for(int k=i+1;k<row-i;k++){temp.push_back(matrix[k][column-1-i]);}//从右向左的每行数据for(int m=column-i-2;(m>=i)&&(row-i-1!=i);m--){temp.push_back(matrix[row-i-1][m]);}//从下往上的每一列数据for(int n=row-i-2;(n>i)&&(column-i-1!=i);n--){temp.push_back(matrix[n][i]);}至此,就可以完成上述问题。
0 0
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 矩阵顺时针打印
- 顺时针打印矩阵
- 顺时针打印矩阵[算法]
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- ShareSDK一键分享
- 多线程阻塞队列面试题
- servlet连接mysql数据库详解
- android---fragment的生命周期
- CDQ分治&&整体二分
- 顺时针打印矩阵
- 2017年Moveit做出的更新
- 【Java每日一题】20170109
- HTML5:表单
- AndroidMainfest.xml详解——<action>
- makefile学习
- [多校][HDU5343]MZL's Circle Zhou后缀自动机+动态规划
- js的调试技巧
- MFC跑马灯的效果(持续更新)