题目描述
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
样例
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
算法分析
模拟
- 1、
4
个while
循环,分别对应向右,向下,向左,向上走,走一趟为一个周期 - 2、若在当前方向的下一个位置可以踩,则踩过去
时间复杂度 $O(n^2)$
Java 代码
class Solution {
static int INF = 0x3f3f3f3f;
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ans = new ArrayList<Integer>();
int n = matrix.length;
if(n == 0) return ans;
int m = matrix[0].length;
int res = 0;
int x = 0,y = -1;
while(res != n * m)
{
//向右走
while(y + 1 < m && matrix[x][y + 1] != INF)
{
ans.add(matrix[x][y + 1]);
matrix[x][y + 1] = INF;
y ++;
res ++;
}
//向下走
while(x + 1 < n && matrix[x + 1][y] != INF)
{
ans.add(matrix[x + 1][y]);
matrix[x + 1][y] = INF;
x ++;
res ++;
}
//向左走
while(y - 1 >= 0 && matrix[x][y - 1] != INF)
{
ans.add(matrix[x][y - 1]);
matrix[x][y - 1] = INF;
y --;
res ++;
}
///向上走
while(x - 1 >= 0 && matrix[x - 1][y] != INF)
{
ans.add(matrix[x - 1][y]);
matrix[x - 1][y] = INF;
x --;
res ++;
}
}
return ans;
}
}
tql