您的位置:首页 > 婚嫁 >

leetcode[数组—中等]59.螺旋矩阵

来源: 阿里云 时间: 2022-10-31 08:50:36

题目来源leetcode

leetcode地址:59.螺旋矩阵II,难度:中等。

题目描述(摘自leetcode):


(资料图片仅供参考)

给你一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的nxn正方形矩阵matrix。示例1:输入:n=3输出:[[1,2,3],[8,9,4],[7,6,5]]示例2:输入:n=1输出:[[1]]提示:1<=n<=20

本地调试代码:

classSolution{//业务代码publicint[][]generateMatrix(intn){...}publicstaticvoidmain(String[]args){intn=4;//设置边长度printMatrix(n);}publicstaticvoidprintMatrix(intn){Solutionsolution=newSolution;intm=n*n;intnumLen=0;while(m>0){m=m/10;numLen++;}numLen+=2;//每个数字之间空两个int[][]ints=solution.generateMatrix(n);for(inti=0;i宽度为4,左对齐}System.out.println;}}}

题解

这是一道逻辑题,花费了我一个多小时解出来,关键就是需要你找到其中的规律!

思路:

刚开始实在没有头绪,就去看了大佬的一个题解思路,看到下面这张图之后就开始撸代码了,我觉得最核心的就是下面这个图,其他主要就是你要找一些规律,例如有边长n对应有多少圈;在哪一圈上下左右每次需要填充的数量;最里边填充一个数字的情况…

图片取自:代码随想录—螺旋矩阵

代码:

publicint[][]generateMatrix(intn){int[][]matrixArr=newint[n][n];if(n==1){matrixArr[0][0]=1;returnmatrixArr;}//填充的数intnum=1;//圈数intoutCircleNums=n%2==1?n/2+1:n/2;//每层(上下左右)要填充的对应数量。例如上图3*3,上下左右方向都要填充2个intcurTire=0;//圈数遍历for(inti=0;ii;j--){matrixArr[curTire+i][j]=num++;}//绘制正方形左边for(intj=i+curTire;j>i;j--){matrixArr[j][i]=num++;}}returnmatrixArr;}

本地调试效果图:

标签: 没有头绪