文章目录
- 螺旋矩阵
- 解题思路
 
螺旋矩阵
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
解题思路
模拟这个螺旋过程。
- 初始化数组
- 确定循环次数,loop = n / 2;
- 循环时,奇数的中间值需要特殊处理
- startx,starty,用于确定每一次循环的起始点
- offset,用于减少每一次循环的此处
- mid,用于处理中间值
终点:**循环不变量,**每一次循环遵循左闭右开的原则。
分为
- 最上方从左往右
- 最右方从上往下
- 最下方从右往左
- 最左方从下往上
详细代码如下:
class Solution {
    public int[][] generateMatrix(int n) {
        //保证循环不变量的操作
        int startx = 0 ,starty = 0;
        int result[][] = new int[n][n]; //初始化数组
        int loop = n / 2; //循环次数,奇数时,中间值需要特殊处理。
        int mid = n / 2; //中间值
        int i,j; //用于循环
        int offset = 1; //用于减少每一次的循环次数
        int count = 1; //用于赋值
        while(loop-- > 0){  //循环次数
        
            //最上方从左往右
            for(j = starty; j < n - offset; j++){
                result[startx][j] = count++;
            }
            //最右方从上往下
            for(i = startx;i < n- offset;i++){
                result[i][j] = count++;
            }
            //最下方从右往左
            for(;j > starty;j--){
                result[i][j] = count++;
            }
            //最左方从下往上
            for(;i > startx;i--){
                result[i][j] = count++;
            }
        startx++;   //设置下一次的起始点
        starty++;   //设置下一次的起始点
        offset++;   //设置下一次的循环次数
        }
        //如果为奇数,中间值,特殊处理
        if(n % 2 == 1){
            result[mid][mid] = count; 
        }
        return result;
    }
}
我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。











![[Halcon学习笔记]Halcon窗口进行等比例显示图像](https://img-blog.csdnimg.cn/img_convert/424adf96e08fefe296458054e277565f.webp?x-oss-process=image/format,png)







