网站开发java web市场营销平台
LeetCode算法题解:螺旋矩阵
题目描述
给定一个 m x n
的矩阵,按照螺旋顺序返回矩阵中的所有元素。
解题思路
1. 初始化变量
我们首先定义四个边界变量来跟踪螺旋遍历的边界:top
、bottom
、left
和 right
。
2. 螺旋遍历
开始从左到右遍历上边界,然后从上到下遍历右边界,接着从右到左遍历下边界,最后从下到上遍历左边界。这个过程会持续,直到所有元素都被遍历。
3. 添加判断条件
为了确保遍历的正确性和避免重复添加元素,我们需要在从右到左和从下到上的遍历过程中添加判断条件。
代码实现
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;
}
注意点与优化
- 在从右到左和从下到上的遍历过程中,我们添加了判断条件来避免重复添加元素和确保遍历的正确性。
总结
通过上述方法和代码实现,我们可以按照螺旋顺序遍历给定的矩阵,并将其所有元素存储在结果列表中。通过合理的边界控制和条件判断,我们确保了遍历的正确性和高效性。