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