顺时针打印矩阵 C++实现与思路分析
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 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.
首先,拿到此题第一步必定时先如图一图二所示,在草稿纸上做一个草稿,理解题目。
观察图2,我们发现在箭头行走的过程中,去掉箭头走过的路径,他就是一个不断收缩矩阵边界的过程。定义四个变量,up、down、left、right。
- 向右走时存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up 加一,且移动过程中上界的up保持不变
- 向下走时存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 right 减一,且移动过程中右界的right保持不变
- 向左走时存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 down 减一,且移动过程中下界的down保持不变
- 向上走时存入整列的值,当存入后,该列再也不会被遍历,代表左边界的 left 加一,且移动过程中左界的left保持不变、
首先,弄清楚函数的输入输出
//输入一个二维vector
//输出一个vector
vector<int> printMatrix(vector<vector<int> > matrix)
//在函数中定义一个vector类型变量,用于存放输出
//计算二维vector的长和宽是否有一个为零,若为零直接返回空的list
vector<int> list ;
if(matrix.size()==0 || matrix[0].size()==0)return list ;
//定义上下左右的界限
//vector中的读数和数组是类似的,都是从0开始
//所以down和right后面要减1
int up = 0;
int down =matrix.