版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21275321/article/details/84112181
题目:
Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
Example:
Input: 3 Output: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
解释:
把1到n2的数字按照顺序顺时针填入数组中,遍历数组的方式和54. Spiral Matrix(python+cpp)是一样的,维持一个变量作为当前填入的值,每次填入以后+1。
python代码:
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
self.matrix=[[0]*n for _ in xrange(n)]
self.num=1;
def changeInCircle(start):
endX=n-1-start
endY=n-1-start
#从左到右改变一行
for i in xrange(start,endX+1):
self.matrix[start][i]=self.num;
self.num+=1;
#从上到下改变一列
for i in xrange(start+1,endY+1):
self.matrix[i][endX]=self.num;
self.num+=1;
#从右到左打印一行
for i in xrange(endX-1,start-1,-1):
self.matrix[endY][i]=self.num;
self.num+=1;
#从下到上打印一列:
for i in xrange(endY-1,start,-1):
self.matrix[i][start]=self.num;
self.num+=1;
start=0
while n>start*2:
changeInCircle(start)
start+=1
return self.matrix
c++代码:
class Solution {
public:
int global_n;
int num=1;
vector<vector<int> > matrix;
vector<vector<int> > generateMatrix(int n) {
global_n=n;
matrix=vector<vector<int> >(n,vector<int>(n,0));
int start=0;
while(start*2<n)
{
changeInCircle(start,matrix);
start++;
}
return matrix;
}
void changeInCircle(int start,vector<vector<int> >&matrix)
{
int endX=global_n-1-start;
int endY=endX;
//从左到右遍历一行
for (int i=start;i<=endX;i++)
{
matrix[start][i]=num;
num++;
}
//从上到下遍历一列(其实不需要判断了)
for(int i=start+1;i<=endY;i++)
{
matrix[i][endX]=num;
num++;
}
//从右到左遍历一行
for(int i=endX-1;i>=start;i--)
{
matrix[endY][i]=num;
num++;
}
//从下到上遍历一列
for(int i=endY-1;i>start;i--)
{
matrix[i][start]=num;
num++;
}
}
};
总结:
由于是方阵,所以不需要太多判断。
I中还是需要判断的。