每画一条边都要坚持一致的左闭右开
注意处理n为奇数时的矩阵中心点
class Solution(object):
def generateMatrix(self, n):
res = [[0]*n for a in range(n)]
startX=0
startY=0
loop=mid=n/2
count=1
for offset in range(1,loop+1):
for i in range(startY,n-offset):
res[startX][i]=count
count+=1
for i in range(startX,n-offset):
res[i][n-offset]=count
count+=1
for i in range(n-offset,startY,-1):
res[n-offset][i]=count
count+=1
for i in range(n-offset,startX,-1):
res[i][startY]=count
count+=1
startX+=1
startY+=1
if n%2!=0:
res[mid][mid]=count
return res
知识点
range函数
for i in range(7,4,-1):
print i
运行结果为:7 6 5
定义二维数组
res = [[0]*n for a in range(n)] 与 res = [[0]*n]*n 的区别:
res = [[0]*n for a in range(n)]
:
- 这是一个列表推导式,它创建了一个新的内部列表
n
次。 - 在这个表达式中,
[0]*n
创建一个包含n
个 0 的列表,然后for a in range(n)
循环执行n
次,每次都创建一个新的这样的列表。 - 因此,结果是
n
个不同的列表,每个列表都有n
个 0,它们都是独立的。
res = [[0]*n]*n
:
- 这个表达式首先创建了一个包含
n
个 0 的列表[0]*n
。 - 然后,这个列表被复制了
n
次,通过*n
实现的。 - 结果是
n
个列表的引用,这些列表实际上是同一个列表的引用。这意味着如果你修改了其中一个子列表中的任何元素,所有子列表中的相应元素都会改变,因为它们都指向同一个列表。