我正在参加「掘金·启航计划」
题目链接: leetcode.com/problems/sp…
1. 题目介绍(Spiral Matrix)
Given an m x n matrix, return all elements of the matrix in spiral order.
【Translate】: 给定一个m × n矩阵,以螺旋顺序返回该矩阵的所有元素。
【测试用例】:
【约束】:
解题的关键在于遍历方向的改变,方向的变化通过边界判断可以实现,遍历什么时候结束只需要计算遍历的总数即可。与其相关的题目还有两个:No 59. Spiral Matrix II和No 885. Spiral Matrix III.
2. 题解
原题解来自于GreatLim在 Super Simple and Easy to Understand Solution 中的comment。检查边界非常简单,就是检查res.size () < n * m,然后在循环里向左向下向右向上依次,然后每次一个大循环完毕,就左+、右-、上+、下-。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new LinkedList<>();
if (matrix == null || matrix.length == 0) return res;
int n = matrix.length, m = matrix[0].length;
int up = 0, down = n - 1;
int left = 0, right = m - 1;
while (res.size() < n * m) {
for (int j = left; j <= right && res.size() < n * m; j++)
res.add(matrix[up][j]);
for (int i = up + 1; i <= down - 1 && res.size() < n * m; i++)
res.add(matrix[i][right]);
for (int j = right; j >= left && res.size() < n * m; j--)
res.add(matrix[down][j]);
for (int i = down - 1; i >= up + 1 && res.size() < n * m; i--)
res.add(matrix[i][left]);
left++; right--; up++; down--;
}
return res;
}
}