题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
思路:用一个全局的数组来存储顺时针打印矩阵的结果,定义变量的lowrow,highrow来分别表示打印的矩阵最外围的小的行坐标与大的行坐标,同理有lowcol,highcol来表示列,递归终止的条件是大的行小于等于小的行,大的列小等于小的列,在不满足终止的条件下,按顺时针打印它最外围的数。具体实现如下:
class Solution {
public:
vector<int>result;
vector<int> printMatrix(vector<vector<int> > matrix) {
int rows = matrix.size();
int cols = matrix[0].size();
print(matrix,0,rows-1,0,cols-1);
return result;
}
//用来实现顺时针打印矩阵的递归函数
void print(vector<vector<int> > matrix,int lowrow,int highrow,int lowcol,int highcol)//
{
int i;
if(lowrow>highrow||lowcol>highcol)
{
return;
}
if(lowrow==highrow&&lowcol==highcol)
{
result.push_back(matrix[lowrow][lowcol]);
return;
}
if(lowrow==highrow)
{
for(i=lowcol;i<=highcol;i++)
{
result.push_back(matrix[lowrow][i]);
}
return;
}
if(lowcol==highcol)
{
for(i=lowrow;i<=highrow;i++)
{
result.push_back(matrix[i][lowcol]);
}
return;
}
//其他的情况
for(i=lowcol;i<=highcol;i++)
{
result.push_back(matrix[lowrow][i]);
}
for(i=lowrow+1;i<highrow;i++)
{
result.push_back(matrix[i][highcol]);
}
for(i=highcol;i>=lowcol;i--)
{
result.push_back(matrix[highrow][i]);
}
for(i=highrow-1;i>lowrow;i--)
{
result.push_back(matrix[i][lowcol]);
}
print(matrix,lowrow+1,highrow-1,lowcol+1,highcol-1);
}
};
finished!!!