给定一个 m x n
的矩阵,按照螺旋顺序返回矩阵中的所有元素。
我们首先定义四个边界变量来跟踪螺旋遍历的边界:top
、bottom
、left
和 right
。
开始从左到右遍历上边界,然后从上到下遍历右边界,接着从右到左遍历下边界,最后从下到上遍历左边界。这个过程会持续,直到所有元素都被遍历。
为了确保遍历的正确性和避免重复添加元素,我们需要在从右到左和从下到上的遍历过程中添加判断条件。
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if (matrix == null || matrix.length == 0) return res;
int top = 0, bottom = matrix.length - 1;
int left = 0, right = matrix[0].length - 1;
while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
res.add(matrix[top][i]);
}
top++;
for (int i = top; i <= bottom; i++) {
res.add(matrix[i][right]);
}
right--;
if (top <= bottom) {
for (int i = right; i >= left; i--) {
res.add(matrix[bottom][i]);
}
}
bottom--;
if (left <= right) {
for (int i = bottom; i >= top; i--) {
res.add(matrix[i][left]);
}
}
left++;
}
return res;
}
通过上述方法和代码实现,我们可以按照螺旋顺序遍历给定的矩阵,并将其所有元素存储在结果列表中。通过合理的边界控制和条件判断,我们确保了遍历的正确性和高效性。