螺旋矩阵

作者: Dracula716 | 来源:发表于2019-03-25 21:33 被阅读7次

原文地址,我的个人博

1.题目

image

2.分析

image

上图展示了一轮完整的顺时针螺旋遍历的过程,整个过程可以分为如图所示的四个阶段,而这四个阶段我们则只需要考虑,是行还是列在变化,是递增还是递减。所以代码当中分别用* isHoriOrVer isIncrease*两个布尔变量来分别表示。

同时,我们需要记录下来我们遍历过的行和列。因为没一轮遍历都是先遍历最靠前的行(列),再遍历最后靠后的行(列)。所以这里我们分别用left,right,top,bottom来分别表示。

3.代码实现


public List<Integer> spiralOrder(int[][] matrix) {

    if (matrix.length != 0 && matrix[0].length != 0) {

        //横向还是纵向,初始是横向

        boolean isHoriOrVer = true;

        //是否是增长序列,初始是增长

        boolean isIncrease = true;

        int top = 0;

        int bottom = matrix.length - 1;

        int left = 0;

        int right = matrix[0].length - 1;

          //默认从第一行第一列开始

        int row = top;

        int column = left;

        int length = matrix.length * matrix[0].length;

        List<Integer> list = new ArrayList<>(length);

        for (int i = 0; i < length; i++) {

            if (isHoriOrVer) {

                if (isIncrease) {

                    list.add(matrix[row][column++]);

                    if (column > right) {

                        row++;

                        top++;

                        column = right;

                        isHoriOrVer = false;

                        isIncrease = true;

                    }

                } else {

                    list.add(matrix[row][column--]);

                    if (column < left) {

                        row--;

                        bottom--;

                        column = left;

                        isHoriOrVer = false;

                        isIncrease = false;

                    }

                }

            } else {

                if (isIncrease) {

                    list.add(matrix[row++][column]);

                    if (row > bottom) {

                        column--;

                        right--;

                        row = bottom;

                        isIncrease = false;

                        isHoriOrVer = true;

                    }

                } else {

                    list.add(matrix[row--][column]);

                    if (row < top) {

                        column++;

                        left++;

                        row = top;

                        isHoriOrVer = true;

                        isIncrease = true;

                    }

                }

            }

        }

        return list;

    }

    return new ArrayList<>();

}

相关文章

  • Python实现螺旋矩阵

    螺旋矩阵 什么是螺旋矩阵? 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大...

  • 螺旋矩阵

    螺旋矩阵 1.想法: 对于矩阵的螺旋我们可以规约为4个方向 2.代码:

  • 螺旋矩阵

    递归 非递归

  • 螺旋矩阵

    给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1...

  • 螺旋矩阵

    题目描述:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。...

  • 螺旋矩阵

    给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1...

  • 螺旋矩阵

    原文地址,我的个人博 1.题目 2.分析 上图展示了一轮完整的顺时针螺旋遍历的过程,整个过程可以分为如图所示的四个...

  • 螺旋矩阵

    写在前面 2019年,年初到蚂蚁金服面试测试工程师的职位,现场有一道笔试题是求螺旋矩阵,当时大概和面试官说了一下思...

  • 螺旋矩阵

    题目信息 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 ...

  • 16/17,螺旋矩阵Ⅰ/Ⅱ/数组与字符串

    螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。...

网友评论

    本文标题:螺旋矩阵

    本文链接:https://www.haomeiwen.com/subject/eudivqtx.html