力扣第54题 中等难度 螺旋矩阵

先看一眼题:

思路:其实和48题一个思路,每次把一圈的数字加到结果里,控制好递归结束的位置就好了 代码:

public List<Integer> spiralOrder(int[][] matrix) {
          
   
        List<Integer> list = new ArrayList<>();
        __spiralOrder(0, matrix, list);
        return list;
    }

    public void __spiralOrder(int start, int[][] matrix, List<Integer> list) {
          
   
        //四个点分别为(a1,b1),(a2,b2),(a3,b3),(a4,b4)
        int a1 = start, b1 = start;
        int a2 = start, b2 = matrix[0].length - start - 1;
        int a3 = matrix.length - start - 1, b3 = matrix[0].length - start - 1;
        int a4 = matrix.length - start - 1, b4 = start;
        //递归终止
        if (a1 > a4)
            return;
        if (a1 == a4) {
          
   
            //把最后一行放进去
            for (int i = b1; i <= b2; i++) {
          
   
                list.add(matrix[a1][i]);
            }
            return;
        }
        if (b1 == b2){
          
   
            //把最后一列放进去
            for(int i = a1; i <= a4 ; i++){
          
   
                list.add(matrix[i][b1]);
            }
            return;
        }
        for (int i = b1; i < b2; i++) {
          
   
            list.add(matrix[a1][i]);
        }
        for (int i = a2; i < a3; i++) {
          
   
            list.add(matrix[i][b2]);
        }
        for (int i = b3; i > b4; i--) {
          
   
            list.add(matrix[a3][i]);
        }
        for (int i = a4; i > a1; i--) {
          
   
            list.add(matrix[i][b4]);
        }
        __spiralOrder(++start, matrix, list);
    }
经验分享 程序员 微信小程序 职场和发展