- 螺旋矩阵 II
难度
中等
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
class Solution {
public:
vector<vector<int>> generateMatrix(int n)
{
vector<vector<int>> Matric(n,vector<int>(n));
int left=0,up=0,right=n-1,down=n-1;
int num=0;
while(num<=n*n)
{
for(int i=left;i<=right;i++)
Matric[up][i]=++num;//整体+1,num+1
//up--;//整体不变,left+1
if((up++)>=down) break;
for(int i=up;i<=down;i++)
Matric[i][right]=++num;
//--right;
if((right--)<=left) break;
for(int i=right;i>=left;i--)
Matric[down][i]=++num;
// --down;
if((down--)<=up) break;
for(int i=down;i>=up;i--)
Matric[i][left]=++num;
// ++left;
if((left++)>=right) break;
}
return Matric;
}
};
python 正确版本
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
Matrix=[[0 for i in range(n)] for i in range(n)]
num,j=1,0
while num<=n*n:
for i in range(j,n-j):
Matrix[j][i]=num
num=num+1;
for i in range(j+1,n-j):
Matrix[i][n-j-1]=num
num=num+1;
for i in range(n-j-2,j-1,-1):
Matrix[n-j-1][i]=num
num=num+1;
for i in range(n-j-2,j,-1):
Matrix[i][j]=num
num=num+1;
j=j+1
return (Matrix)
python 错误版本思考(运行出错,答案错误)
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
Matrix=[[0 for i in range(n)] for i in range(n)]
num=1
left=0
right=n-1
up=0
down=n-1
while num<=n*n:
for i in range(left,right+1):
Matrix[up][i]=num
num=num+1;
if up>=down:
break;
else :
up=up+1
for i in range(up,down+1):
Matrix[i][right]=num
num=num+1;
if right<=left:
break;
else :
right=right-1
for i in range(right-1,left-1,-1):
Matrix[down][i]=num
num=num+1;
if down<=up:
break;
else :
down=down-1
for i in range(down-1,up-1,-1):
Matrix[i][left]=num
num=num+1;
if right<=left:
break;
else :
left=left+1
return (Matrix)
本题疑点:
1.从左到右从上到下依次找到它们之间的方法,C++中定义left=0,right=n-1,up=0,down=n-1,很容易理解,但python类似定义为何不行?各位可以写在评论中。
2.python中[[0 for i in range(n)] for i in range(n)]是指:最开始是有n从0到n-1个0即n个0组成的列表[0,0…],然后有n个这样的列表再组成一个新的元素全为0列表的列表,也就是初始化矩阵。