螺旋矩阵Ⅰ、Ⅱ

螺旋矩阵 II

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3 输出:
[
    [ 1, 2, 3 ],
    [ 8, 9, 4 ],
    [ 7, 6, 5 ]
]

思路:我们可以为此矩阵设置上、下、左、右边界,填完一行或一列,响应的边界就向中心收缩,左边界的初始值为0,右边界的初始值为(横向数组的长度-1),上边界的初始值为0,下边界的初始值为(竖向数组的长度-1)。

class Solution {
    
    
    public int[][] generateMatrix(int n) {
    
    
        int l = 0, r = n - 1, t = 0, b = n - 1;
        int[][] mat = new int[n][n];
        int num = 1, tar = n * n;
        while(num <= tar){
    
    
        	//左到右
            for(int i=l;i<=r;i++) mat[t][i]=num++;
            t++;
            //上到下
            for(int i=t;i<=b;i++) mat[i][r]=num++;
            r--;
            //右到左
            for(int i=r;i>=l;i--) mat[b][i]=num++;
            b--;
            //下到上
            for(int i=b;i>=t;i--) mat[i][l]=num++;
            l++;
        }
        return mat;
    }
}

螺旋矩阵 I

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

示例 1:

输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:

输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

思路:可以仿照上一题的思路,但是需要注意不能照搬,因为m x n的矩阵不同于n x n的矩阵。

class Solution {
    
    
    public List<Integer> spiralOrder(int[][] matrix) {
    
    
        List<Integer> list=new ArrayList<>();
        //行数
        int m=matrix.length;
        if(m==0) return list;
        //列数
        int n=matrix[0].length;
        //边界:上t、下b、左l、右r
        int t=0,l=0,r=n-1,b=m-1;
        int sum=0;
        while(sum <= m*n){
    
    
            for(int i=l;i<=r;i++) {
    
    
                list.add(matrix[t][i]);
                sum++;
            }
            t++;
            if(sum==m*n) break;
            for(int i=t;i<=b;i++) {
    
    list.add(matrix[i][r]);sum++;}
            if(sum==m*n) break;
            r--;
            for(int i=r;i>=l;i--) {
    
    list.add(matrix[b][i]);sum++;}
            if(sum==m*n) break;
            b--;
            for(int i=b;i>=t;i--) {
    
    list.add(matrix[i][l]);sum++;}
            if(sum==m*n) break;
            l++;
        }
        return list;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42451178/article/details/106963458