13.顺时针打印矩阵
题目内容:
代码及思路:
#include<iostream>
#include<vector>
using namespace std;
class solution
{
public:
vector<int> printMatrix(vector<vector<int>> matrix)
{
//由于是从外向里顺时针打印每个数字,则就要以矩阵的行列设定边界范围
int row = matrix.size();
int col = matrix[0].size();
vector<int> res;
if (row == 0 || col == 0)
return res;
//设出边界
int left = 0, right = col - 1;
int top = 0, bottom = row - 1;
//根据从左到右,从上到下的顺序进行打印
while (left <= right&&top <= bottom)
{
//从左到右
for (int i = left; i <= right; i++)
res.push_back(matrix[top][i]);
if (top < bottom)
{
//从上到下
for (int j = top + 1; j <=bottom; j++)
{
res.push_back(matrix[j][right]);
}
}
//从右到左
if (left < right&&top < bottom)
{
for (int i = right - 1; i >= left; i--)
{
res.push_back(matrix[bottom][i]);
}
for (int j = bottom - 1; j >= top+1; j--)
{
res.push_back(matrix[j][left]);
}
}
//每一个变量前进
left++;
right--;
top++;
bottom--;
}
return res;
}
};
void main()
{
solution* object = new solution();
vector<vector<int>> matrix;
int num;
for (int i = 0; i < 4; i++)
{
matrix.resize(4);
for (int j = 0; j < 4; j++)
{
cin >> num;
matrix[i].push_back(num);
}
}
vector<int> res;
res=object->printMatrix(matrix);
for (int i = 0; i < res.size(); i++)
{
cout << res[i] << endl;
}
}