一、题目
顺时针打印矩阵:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。如下图的矩阵顺序打印的数字为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10
1 2 3 4
5 6 7 8
9 10 11 12
二、解法
其实思路很简单:
①判空
②分别得到矩阵的行数和列数
③确定初始转一圈的上下左右四个点的位置
④根据这四个点依次把数据添加到vector中,每转一圈要改变点的位置
⑤返回vector
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
int row = matrix.size();
int col = matrix[0].size();
int left = 0;
int right = col-1;
int up = 0;
int down = row-1;
while(left<=right&&up<=down)
{
//左上到右上
for(int i=left; i<=right; ++i)
res.push_back(matrix[up][i]);
//右上到右下
for(int i=up+1; i<=down; ++i)
res.push_back(matrix[i][right]);
//右下到左下,判断是否与 左上到右上 重复
if(up!=down){
for(int i=right-1; i>=left; --i)
res.push_back(matrix[down][i]);
}
//左下到左上,判断是否与 右上到右下 重复
if(left!=right){
for(int i=down-1;i>up;--i)
res.push_back(matrix[i][left]);
}
left++; right--; up++; down--;
}
return res;
}
};