zoukankan      html  css  js  c++  java
  • 螺旋矩阵 II

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

    示例:

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

    解决思路:首先填写矩阵最外一圈,接着依次向内。

    对于n行n列的矩阵,每填一圈余下的矩阵为(n-2)行(n-2)列,这个特点可以作为循环的终止条件。

    代码如下:

        public static int[][] generateMatrix(int n) {
    
            if (n==0) return new int[0][0];
            if (n==1) return new int[][]{{1}};
            int[][] matrix = new int[n][n];
    
            int i,j;
            int b=0; //每一圈填充时,i,j的开始位置, (0,0),(1,1)...(n-1,n-1)
            int m = n; // 每填一圈,行数列数自减2
            int k = 1;
            while(m>0) {
    
                i = b;
                j = b;
                while(j<n-b-1) matrix[i][j++] =  k++;    // (b,b)->(b,n-b-1) 不包含最后一个
                while(i<n-b-1) matrix[i++][j] = k++;     // (b,n-b-1)->(n-b-1,n-b-1) 不包含最后一个
                while(j>b) matrix[i][j--] = k++;         // (n-b-1,n-b-1)->(n-b-1,b) 不包含最后一个
                while(i>b) matrix[i--][j] = k++;         // (n-b-1,b)->(b,b) 不包含最后一个
    
                b++;
                m-=2;
            }
            // 若n为奇数,最后一圈为1行1列,上述while循环中没有填写
            if (n%2 == 1) matrix[b-1][b-1] = k;
            return matrix;
        }
  • 相关阅读:
    接口测试—-工具篇,实现接口自动化
    接口自动化测试,完整入门篇
    接口测试系列汇总
    Java教程
    补充三:国际化
    补充二:会话控制——Cookie
    补充一:EL简介
    ES6——JavaScript 的下一个版本标准
    hibernate---session查询
    缓存技术--页面缓存
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9029861.html
Copyright © 2011-2022 走看看