题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例:
输入
matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出
[1,2,3,6,9,8,7,4,5]
题解思路
针对这种模拟类型的题目,首先要确定是否需要控制条件,若需要则在模拟的外部先定好外部控制条件,若不需要,则不用设定外部控制条件,随后进行过程模拟,得出结果。 针对本题,过程如下:
- 设定外部四个边界,above,below,right,left,用于控制模拟过程的返回以及终止。
- 利用while死循环模拟顺时针打印的过程,同时在循环中,需要对边界的值进行改变,如向下缩小一圈则above--,直到有边界越界,则结束循环,获取到所有的值存储在数组v中。
代码如下
class Solution {
public:
int row;
int column;
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> v;
if(matrix.empty())
return v;
int above = 0;
int below = matrix.size() - 1;
int left = 0;
int right = matrix[0].size() - 1;
while(true){
for(int i = left;i <= right;i++)
v.push_back(matrix[above][i]);
if(++above > below)
break;
for(int i = above;i <= below;i++)
v.push_back(matrix[i][right]);
if(--right < left)
break;
for(int i = right;i >= left;i--)
v.push_back(matrix[below][i]);
if(--below < above)
break;
for(int i = below;i >= above;i--)
v.push_back(matrix[i][left]);
if(++left > right)
break;
}
return v;
}
};
一点感悟
在我看来,其实递归,dfs,模拟本质上是有关系的,他们的关系大致如下:
评论