螺旋矩阵

螺旋矩阵

1.想法:


对于矩阵的螺旋我们可以规约为4个方向

image.png

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

2.代码:

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

你可能感兴趣的:(螺旋矩阵)