class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>matrix(n,vector<int>(n,0));//产生一个二维数组,n行每行n个0
int num=1;
int top=0,right=n-1;
int bottom=n-1,left=0;
while(top<=bottom && left <= right)
{
for(int i=left;i <= right;i++)
{
matrix[top][i]=num++;
}
top++;//上层开始向下移动1格
for(int i=top;i<=bottom;i++)
{
matrix[i][right]=num++;
}
right--;
if(top<=bottom)
{ for(int i=right;i>=left;i--)
{
matrix[bottom][i]=num++;
}
bottom--;}
if(left<=right){ for(int i=bottom;i>=top;i--)
{
matrix[i][left]=num++;
}
left++;
}
}
return matrix;
}
};
代码
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>result;
int m = matrix.size();//行数
int n = matrix[0].size();//列数
int top = 0,bottom=m-1, left= 0, right = n-1;
while(top <= bottom && left <= right)
{
for(int i=left;i <= right; ++i)//这里使用++i和i++是一样的效果
{
result.push_back(matrix[top][i]);
}
top++;
for(int i= top; i <= bottom;++i)
{
result.push_back(matrix[i][right]);
}
right--;
if(top<=bottom)//检查上边界是否小于下边界,如果是从右到左遍历下边界的元素,并加到result数组中
{
for(int i=right; i>=left;--i)
{
result.push_back(matrix[bottom][i]);
}
bottom--;
}
if(left<=right)
{
for(int i = bottom;i>=top;--i)
{
result.push_back(matrix[i][left]);
}
left++;
}
}
return result;
}
};