54. 螺旋矩阵
难度中等870
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
代码:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> re=new ArrayList<Integer>();
int n=matrix.length;
if(n==0) return re;
int m=matrix[0].length;
if(m==0) return re;
int i=0,j=0;
int sN=0,sM=0;
int num=n*m;
//O(n*m) O(n*m)
while(re.size()!=num)
{
for(j=sM;j<m;j++)
re.add(matrix[i][j]);
if(re.size()==num) break;
j--;
for(i=sN+1;i<n;i++)
re.add(matrix[i][j]);
if(re.size()==num) break;
i--;
for(j=m-2;j>=sM;j--)
re.add(matrix[i][j]);
if(re.size()>=num) break;
j++;
for(i=n-2;i>=sN+1;i--)
re.add(matrix[i][j]);
if(re.size()>=num) break;
i++;
sN++;
n--;
sM++;
m--;
}
return re;
}
}