题目描述
给定一个整型矩阵matrix,请按照顺时针转圈的方式打印它。
示例1
输入
复制
[[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]
题解:
题意很明确,就是让顺时针走矩阵
直接模拟就行
如图一样,设
int end=n-1;
int beg=0;
int l=0;
int r=m-1;
四个变量,分别表示矩形的上下和左右,然后按照图中红色箭头的顺序一样存入vectorsum内即可
当(end = = beg)时,说明行的已经取完,就不用再取了
(l = = r)时也是一样
自己模拟模拟过程就能感受出来
代码:
class Solution {
public:
/**
*
* @param matrix int整型vector<vector<>> the matrix
* @return int整型vector
*/
vector<int> printMatrix(vector<vector<int> >& matrix) {
// write code here
int n=matrix.size();//lie
int m=matrix[0].size();//hang
vector<int>sum;
int end=n-1;
int beg=0;
int l=0;
int r=m-1;
int i;
while(end>=beg&&l<=r)
{
for(int i=l;i<=r;i++)
sum.push_back(matrix[beg][i]);
for(int i=beg+1;i<=end;i++)
{
sum.push_back(matrix[i][r]);
}
for(int i=r-1;i>=l;i--)
{
if(end==beg)break;
sum.push_back(matrix[end][i]);
}
for(int i=end-1;i>=beg+1;i--)
{
if(l==r)break;
sum.push_back(matrix[i][l]);
}
beg++;
end--;
l++;
r--;
}
return sum;
}
};