一、题目 :
1、分析:
可以按照该矩阵中元素的个数来进行打印,分为四个部分:
- 最上面的行
- 最右边的列
- 最下边的行
- 最左边的列
【尤其注意每行的起点和终点】
2、代码
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res; //用来存放打印的数字
//二维数组的行和列
int rows=matrix.size(),columns=matrix[0].size();
if(rows<=0||columns<=0)
return res;
//每行最左到最右,每列最上到最下
int left=0,right=columns,up=0,down=rows;
int x=0,y=0; //当前元素的索引
res.push_back(matrix[x][y]);
int count=0,maxCount=columns*rows;
for(count=1;count<maxCount;)
{
//最上面的行
for(y++;y<right && count<maxCount;y++)
{
res.push_back(matrix[x][y]);
count++;
}
y--;
up++;
//最右边的列
for(x++;x<down && count<maxCount;x++)
{
res.push_back(matrix[x][y]);
count++;
}
x--;
right--;
//最下边的行
for(y--;y>=left && count<maxCount;y--)
{
res.push_back(matrix[x][y]);
count++;
}
y++;
down--;
//最左边的列
for(x--;x>=up && count<maxCount;x--)
{
res.push_back(matrix[x][y]);
count++;
}
x++;
left++;
}
return res;
}
};