写在前面
2019年,年初到蚂蚁金服面试测试工程师的职位,现场有一道笔试题是求螺旋矩阵,当时大概和面试官说了一下思路,当时说的是用搜索的方法。还给面试官讲解了一下,写了一下伪代码。当时面试官问还有其他方法吗?我说没有了.....,你有其他更好的方法吗?当时她,啥也没有说
今天有空,突然想起了这事,在力扣上也看到了这道题,就写了一下代码。方法确实可行
题目
https://leetcode-cn.com/problems/spiral-matrix-ii/
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路
搜索的开始点为[x,y],搜索的方向按照→,↓,←,↑(右、下、左、上。[x+1, y],[x,y+1][x-1,y],[x,y-1]),四个方向循环搜索,每个方向搜索的结束条件是:
1、当前点已经到达边界。比如,现在已经到达方向↓的边界,下个方向就应该是←
2、当前点已经设置过值
代码
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
List = [ [ 0 for i in range(n)] for j in range(n)]; #初始化矩阵
h = [1,0, -1, 0];
l = [0, 1, 0, -1];
x = y = 0;
index = 1;
flag = 0;
for i in range(n*n):
if List[x][y] == 0:
List[x][y] = index;
index += 1;
# 判断是否到边界,或者是设置过值
if y+h[flag] == n or x+l[flag]==n or y+h[flag] == -1 or x+l[flag]==-1 or List[x+l[flag]][y+h[flag]]!=0:
flag = (flag+1)%4;
y += h[flag];
x += l[flag];
return List;
网友评论