题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
解题思路:
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
//确定matrix的行数和列数
int col=matrix[0].size();
int row=matrix.size();
vector<int> res;
if (col < 0 || row < 0) //对输入进行判断
return res;
int start = 0;
//int index = 0;
while (col>start * 2 && row>start * 2) //每次循环打印一圈时,左上角的坐标[i,i],且
{
helper(matrix, col, row, start,res);
++start;
}
return res;
}
void helper(vector<vector<int>> matrix, int col, int row, int start,vector<int> &res)
{
int endx = col - 1 - start;
int endy = row - 1 - start;
//从左到右打印数据
for (int i = start; i <= endx; i++)
{
//cout << matrix[start][i]<<endl;
res.push_back(matrix[start][i]);
}
//从上到下打印数据
if(start<endy)
for (int j = start + 1; j <= endy; j++)
{
//cout << matrix[j][endx]<<endl;
res.push_back(matrix[j][endx]);
}
//从右到左打印数据
if(start<endx && start<endy)
for (int i = endx - 1; i >= start; i--)
{
//cout << matrix[endy][i] << endl;
res.push_back(matrix[endy][i]);
}
//从下往上打印
if(start<endx && start<endy-1)
for (int j = endy - 1; j>=start+1; j--)
{
//cout << matrix[j][endx] << endl;
res.push_back(matrix[j][start]);
}
}
};