题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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) {
int xstart, xend;
int ystart, yend;
vector<int> output;
if (matrix.size() == 0)
return output;
xstart = 0;
xend = matrix[0].size() - 1;
ystart = 0;
yend = matrix.size() - 1;
int shortedge = min(xend,yend);
shortedge+=1;
int count = 0;
//关键是截止条件
while (2*count<shortedge)
{
count++;
//从左往右
for (int i = xstart; i <= xend; i++)
output.push_back(matrix[ystart][i]);
//从右上往右下
for (int i = ystart+1; i <= yend-1; i++)
output.push_back(matrix[i][xend]);
if (yend !=ystart)
//从右下往左下
for (int i = xend; i >= xstart; i--)
output.push_back(matrix[yend ][i]);
if (xstart != xend)
//从左下往左上
for (int i = yend-1; i >= ystart + 1; i--)
output.push_back(matrix[i][xstart]);
xstart++;
xend--;
ystart++;
yend--;
}
return output;
}
};