LeetCode54 59螺旋矩阵 螺旋矩阵II (数组)

xiaoxiao2025-10-08  27

1.螺旋矩阵

给定一个包含 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<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> empty_matrix; if(matrix.size()==0) return empty_matrix; vector<int> spiralarray; int colums=matrix[0].size(); int rows=matrix.size(); int loop=rows<colums?(rows+1)/2:(colums+1)/2; int col=colums,row=rows; for(int i=0;i<loop;i++){ for(int a=i;a<colums-i;a++){ spiralarray.push_back(matrix[i][a]); } for(int b=i+1;b<rows-i;b++){ spiralarray.push_back(matrix[b][colums-i-1]); } if(col==1 || row==1) break; for(int c=colums-i-2;c>i-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; } };

2.螺旋矩阵II

给定一个正整数 n,生成一个包含 1 到 n 2 n^{2} n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]] 解题思路:思路类似于螺旋矩阵, 只不过先请求一个容器,然后赋值到每个索引即可。

class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> tempMatrix(n,vector<int>(n)); int value=1; int topLoop=(n+1)/2; int col=n; int row=n; for(int loop=0;loop<topLoop;++loop){ for(int a=loop;a<n-loop;++a){ tempMatrix[loop][a]=value; ++value; } for(int b=loop+1;b<n-loop;++b){ tempMatrix[b][n-loop-1]=value; ++value; } if(col==1 || row==1){ break; } for(int c=n-loop-2;c>loop-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; } };```
转载请注明原文地址: https://www.6miu.com/read-5037560.html

最新回复(0)