54. 螺旋矩阵
给你一个 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
方法一:模拟
解题思路
- 直接模拟就行了,从最外圈一圈一圈地往中心逼近。但是细节要人老命~
参考代码
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ans = new ArrayList<>();
int m = matrix.length, n = matrix[0].length;
// 上 下 左 右
int top = 0, bot = m - 1, left = 0, right = n - 1;
while (top <= bot && left <= right) {
int l = left;
while (l <= right) {
ans.add(matrix[top][l]);
l++;
}
int t = top + 1;
while (t <= bot) {
ans.add(matrix[t][right]);
t++;
}
if(top < bot && left < right) {
int r = right - 1;
while (r > left) {
ans.add(matrix[bot][r]);
r--;
}
int b = bot;
while (b > top) {
ans.add(matrix[b][left]);
b--;
}
}
top++;
bot--;
left++;
right--;
}
return ans;
}