题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.
解题思路
这道题目的思路还是比较简单的,设置四个方位,上下左右,分别为top,buttom,left,right,然后首先从[0, 0]的位置出发,从左至右,然后从上至下,从右到左,从下至上,看做一圈,掌控好循环条件,每放入一个数放到res中count都自增,每进行完一条线路,top,left, right, buttom,四个变量中都有一个需要自增或者自减,当res的总数和mat的总数一样多的时候,说明已经遍历完毕了。
具体代码如下:
class Solution
{
public:
vector<int> printMatrix(vector<vector<int> > mat)
{
int length = mat[0].size();
int height = mat.size();
vector<int> res{};
int dir = 0;
int top = 0;
int left = 0;
int right = length - 1;
int buttom = height - 1;
int first = 0;
int second = 0;
int count = 0;
while(count < length * height)
{
if (dir % 4 == 0)
{
for (int i = left; i <= right; i++)
{
second = i;
res.push_back(mat[first][second]);
count++;
}
top++;
dir++;
}
else if (dir % 4 == 1)
{
// cout << "top: " << top << endl;
for (int i = top; i <= buttom; i++)
{
first = i;
res.push_back(mat[first][second]);
count++;
}
right--;
dir++;
}
else if (dir % 4 == 2)
{
for (int i = right; i >= left; i--)
{
second = i;
res.push_back(mat[first][second]);
count++;
}
buttom--;
dir++;
}
else if (dir % 4 == 3)
{
for (int i = buttom; i >= top; i--)
{
first = i;
res.push_back(mat[first][second]);
count++;
}
left++;
dir++;
}
}
return res;
}
};