您的位置:首页 > Web前端

(剑指offer)顺时针打印矩阵

2018-03-21 16:51 323 查看

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.

vector<int> printMatrix(vector<vector<int> > matrix)
{
int sizeRow=matrix.size()-1;//行大小,用来上下 遍历
int sizeCol=matrix[0].size()-1;//列大小,用来左右 遍历
int Row=0,Col=0;
vector<int> tmp;
while(sizeRow>=Row&&sizeCol>=Col)
{
for(int i=Col; i<=sizeCol; i++)tmp.push_back(matrix[Row][i]);
Row++;//向↓缩
if(Row<=sizeRow)//相等时,就剩了一列
{
for(int i=Row; i<=sizeRow; i++)tmp.push_back(matrix[i][sizeCol]);//行变列不变
sizeCol--;//向←缩
}
if(Row<=sizeRow&&Col<=sizeCol)//至少剩一个有效
{
for(int i=sizeCol; i>=Col; i--)tmp.push_back(matrix[sizeRow][i]);
sizeRow--;//向↑缩
}
if(Row<sizeRow&&Col<=sizeCol)//至少剩两行有效
{
for(int i=sizeRow; i>=Row; i--) tmp.push_back(matrix[i][Col]);
Col++;//向→缩
}
}
return tmp;
}

int main()
{
vector<vector<int> > a={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
vector<int> x=printMatrix(a);
for(int i=0;i<x.size();i++)cout<<x[i]<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指offer