LeetCode算法题解:螺旋矩阵


LeetCode算法题解:螺旋矩阵

题目描述

给定一个 m x n 的矩阵,按照螺旋顺序返回矩阵中的所有元素。

解题思路

1. 初始化变量

我们首先定义四个边界变量来跟踪螺旋遍历的边界:topbottomleftright

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;
}

注意点与优化

  • 在从右到左和从下到上的遍历过程中,我们添加了判断条件来避免重复添加元素和确保遍历的正确性。

总结

通过上述方法和代码实现,我们可以按照螺旋顺序遍历给定的矩阵,并将其所有元素存储在结果列表中。通过合理的边界控制和条件判断,我们确保了遍历的正确性和高效性。


你可能感兴趣的:(算法,leetcode,矩阵)