模拟
vector.size返回的是矩阵的行数,vector[0].size返回的是矩阵的列数
先排除传入的矩阵是空矩阵
先计算上下左右的边界
只要边界不重合,就不停止输出,完成一个部分的打印,就将当前的一个边界回收
不可以在for循环结束的时候一起判断,因为这样可能会出现无效遍历或越界的情况
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
int n = matrix.size();
//先排除特殊情况
if (n == 0)
return res;
//左边界
int left = 0;
//右边界
int right = matrix[0].size() - 1;
//上边界
int up = 0;
//下边界
int down = n - 1;
//直到边界重合
while (left <= right && up <= down) {
//上边界的从左到右
for (int i = left; i <= right; i++)
res.push_back(matrix[up][i]);
//上边界向下
up++;
if (up > down)
break;
//右边界的从上到下
for (int i = up; i <= down; i++)
res.push_back(matrix[i][right]);
//右边界向左
right--;
if (left > right)
break;
//下边界的从右到左
for (int i = right; i >= left; i--)
res.push_back(matrix[down][i]);
//下边界向上
down--;
if (up > down)
break;
//左边界的从下到上
for (int i = down; i >= up; i--)
res.push_back(matrix[i][left]);
//左边界向右
left++;
if (left > right)
break;
}
return res;
}
};