给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[ [ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
思路:可以根据环的个数来遍历这个矩阵,环个数的计算为 l o o p = m i n ( c l o u m s + 1 , r o w s + 1 ) / 2 loop=min(cloums+1, rows+1)/2 loop=min(cloums+1,rows+1)/2, 然后通过遍历每个环的四条边可以得到,环的四条边如下:
边1:
[[1 , 2 , 3 , 4 ] ,
[5, 6, 7, 8],
[9,10,11,12]]
边1+边2:
[[1 , 2 , 3 , 4 ] ,
[5, 6, 7, 8 ],
[9,10,11,12 ]]
边1+边2+边3:
[[1 , 2 , 3 , 4 ] ,
[5, 6, 7, 8 ],
[9 ,10 ,11 ,12 ]]
边1+边2+边3+边4:
[[1 , 2 , 3 , 4 ] ,
[5 , 6, 7, 8 ],
[9 ,10 ,11 ,12 ]]
class Solution {
public:
vector spiralOrder(vector>& matrix) {
vector empty_matrix;
if(matrix.size()==0) return empty_matrix;
vector spiralarray;
int colums=matrix[0].size();
int rows=matrix.size();
int loop=rowsi-1;c--){
spiralarray.push_back(matrix[rows-i-1][c]);
}
for(int d=rows-i-2;d>i;d--){
spiralarray.push_back(matrix[d][i]);
}
col=col-2;
row=row-2;
}
return spiralarray;
}
};
给定一个正整数 n,生成一个包含 1 到 n 2 n^{2} n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[ [ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]]
解题思路:思路类似于螺旋矩阵, 只不过先请求一个容器,然后赋值到每个索引即可。
class Solution {
public:
vector> generateMatrix(int n) {
vector> tempMatrix(n,vector(n));
int value=1;
int topLoop=(n+1)/2;
int col=n;
int row=n;
for(int loop=0;looploop-1;--c){
tempMatrix[n-loop-1][c]=value;
++value;
}
for(int d=n-loop-2;d>loop;--d){
tempMatrix[d][loop]=value;
++value;
}
row=row-2;
col=col-2;
}
return tempMatrix;
}
};```