leetcode 数组—螺旋矩阵 ver2

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

示例:

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

题解:
T,B,L,R分别表示未扫描矩阵的边界。
初始时,T=0,B=n-1,L=0,R=n-1; 直到整个矩阵扫完完毕结束。
先从左到右行扫描,第T行的第L列到第R列,即nums[T][L]~nums[T][R];扫描完一行,相应T增1.
从上到下列扫描,第R列的第T行到第B行,即nums[T][R]~nums[B][R];扫描完一列,相应R减1.
从右到左行扫描,第B行的第R列到第L列,即nums[B][R]~nums[B][L];扫描完一行,相应B减1.
从下到上列扫描,第L列的第B行到第T行,即nums[B][L]~nums[T][L];扫描完一列,相应L增1.
在这里插入图片描述


JAVA代码:

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

}
发布了9 篇原创文章 · 获赞 0 · 访问量 256

猜你喜欢

转载自blog.csdn.net/powerful_ren/article/details/104621036