美文网首页
螺旋矩阵

螺旋矩阵

作者: 最困惑的时候就是能成长的时候 | 来源:发表于2019-04-09 13:35 被阅读0次

螺旋矩阵

1.想法:

\left[ \begin{matrix} 1 & 2& 3 & 4 \\ 5& 6 & 7 & 8 \\ 9 & 10 & 11 & 12 \\ 13 & 14 & 15 & 16 \end{matrix} \right]
对于矩阵的螺旋我们可以规约为4个方向

image.png
我们使用0代表向右,1代表向下,2代表向左,3代表向上
那么可以得出向右的时候是y坐标++,同理可得其他方向
我们的两条准则:
1.我们遇到数组边界或者已经被遍历过了的数就换方
2.当换了方向的第一个数已经被遍历过说明整个数组被遍历了

2.代码:

 List<Integer> result = new ArrayList<>();
        if(matrix.length == 0) return result;
        int[][] flag = new int[matrix.length][matrix[0].length];
        int direction = 0;//0:代表了向右1:代表了向下2:代表了向左,3:代表了向上
        int x=0,y=0;//现在所在的位置
        while (x>-1&&y>-1&&x<matrix.length&&y<matrix[0].length&&flag[x][y]!=1){  //下一方向的起始位置没有被遍历过
            switch (direction%4){
                case 0:
                    while(y<matrix[0].length&&flag[x][y] == 0){
                        result.add(matrix[x][y]);
                        flag[x][y] = 1;
                        y++;
                    }
                    y--;  //返回上一个没有越界的位置
                    x++; //开启下一个位置
                    break;
                case 1:
                    while(x<matrix.length&&flag[x][y] == 0){
                        result.add(matrix[x][y]);
                        flag[x][y] = 1;
                        x++;
                    }
                    x--;  //返回上一个没有越界的位置
                    y--; //开启下一个位置
                    break;
                case 2:
                    while (y>-1&&flag[x][y] == 0){
                        result.add(matrix[x][y]);
                        flag[x][y] = 1;
                        y--;
                    }
                    y++;
                    x--;
                    break;
                case 3:
                    while(x>-1&&flag[x][y] == 0){
                        result.add(matrix[x][y]);
                        flag[x][y] = 1;
                        x--;
                    }
                    x++;  //返回上一个没有越界的位置
                    y++; //开启下一个位置
                    break;
            }
            direction++;
        }
        return result;

相关文章

  • 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/ycfbiqtx.html