螺旋矩阵
思路:
这题是一个模拟的题目。
可以观察出一些性质:每次需要换方向的时候都是到达了边界(长度和宽度的边界)。
不知道怎么转化为代码! 哭了
看看题解吧:真不会
看到一个太妙的方法了:
代码:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int left=0;//左边界
int right=matrix[0].size()-1;//右边界
int top=0;//上边界
int down=matrix.size()-1;//下边界
vector<int> ans;
if(matrix.empty()) return ans; //若数组为空,直接返回答案
while(1)
{
for(int i=left;i<=right;i++)//向右移动直到最右
{
ans.push_back(matrix[top][i]);
}
if(++top>down) break;
for(int i=top;i<=down;i++)//向下移动直到最下
{
ans.push_back(matrix[i][right]);
}
if(--right<left) break;
for(int i=right;i>=left;i--)//向左移动直到最左
{
ans.push_back(matrix[down][i]);
}
if(--down<top) break;
for(int i=down;i>=top;i--)//向上移动直到最上
{
ans.push_back(matrix[i][left]);
}
if(++left>right) break;
}
return ans;
}
};