文章目录
题目描述
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
简化题目
生成一个n*n的矩阵,矩阵内的数字按照顺时针的方式填充,从1开始。
思路分析
这道题刚拿到手没什么比较好的思路,直接暴力循环,然后做了一小时没过去,边界处理实在繁琐,总是各种出错。
整理思路,按照每一圈四条边的逻辑来处理,也就是 顺时针一圈的四条边,按照顺序 上右下左 四条边。
首先理清一条边的思路,在一条边中,我们处理包含第一个数,但不包含最后一个数,最后一个数由下一条边去处理,这里看图就很容易理解了,所以处理每一条边的区间是[x,y)。
当到达第二圈的时候还有几个需要注意的地方,按下面这个例子,第一圈循环完之后,将开始循环内圈,从5开始,5,6,10,9这样的顺序。这里一定要想清楚,我们开始定义的区间是[x,y),所以内圈的循环,上边的边负责5,右边的负责6,下边的负责10,左边的负责9。
其实可以发现 第一圈开始点为(0,0) 第二圈开始点为(1,1)所以我们要设置一个变量控制每一圈的起始点,start_x = 0 和start_y=0。
再进一步的,每一条边的结束位置也需要调整,在上面的例子中可以看到,按照一开始的[x,y)区间循环每一条边,在第一圈的时候,每一条边终止点为第一行的倒数第一个(不包含),而进入内圈之后,每一条边的 终止点为倒数第二个(不包含),所以这里还要定义一个变量temp=1.没经过一圈就加1,用来控制每条边的结束位置。
最后就是循环多少圈了,这个比较好想 n//2圈就行了。
完整代码