用python刷LeetCode DAY 6
题目:59.螺旋矩阵II
题目要求:
这个题跟前面题有着明显的不同,感觉不是在考你算法能力,考察的是你的代码实现能力
思路:大家可以自己代值模拟一遍,发现n为偶数时转n/2圈,当n为奇数时转n/2圈,加上圈中间单独赋一个值。然后定义一个二维数组 m a t r i x [ i ] [ j ] matrix[i][j] matrix[i][j],把一个圈分为四条边,第一条边赋值时i++,j不变,第二条边赋值时i不变,j++,第三条边赋值时i–,j不变,第四条边赋值时i不变,j–,使用左闭右开,即一条边包含n-1个数,避免重复赋值。进入第二个圈,要注意i和j都从1开始,且每条边包含n-2个数,第三个圈,i和j从2开始,每条边包含n-3个数,以此类推,下面开始代码演示:
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
count = 1 # 用count++给矩阵中每一处赋值
matrix = [[0] * n for _ in range(n)] # 创建一个全为0的n*n矩阵,后面再一个一个赋值
loop = n // 2 # loop代表有几个圈
start_x, start_y =0, 0 # start_x,start_y代表每一条边的起始位置
for offset in range(1, loop + 1):
for j in range(start_x, n - offset): # 第一条边j从start_x到n-offset-1
matrix[start_x][j] = count
count += 1
for i in range(start_y, n - offset): # 第二条边i从start_y到n-offset-1
matrix[i][n - offset] = count
count += 1
for j in range(n - offset, start_x, -1): # 第三条边j从start_x到n-offset-1
matrix[n - offset][j] = count
count += 1
for i in range(n - offset, start_y, -1): # 第四条边i从start_y到n-offset-1
matrix[i][start_y] = count
count += 1
start_x += 1
start_y += 1
if n % 2 == 1: # 当n为奇数时还要加上圈中间单独赋一个值
matrix[n//2][n//2] = count
return matrix
此题因为题目给定1 <= n <= 20,n较小,不用考虑时间复杂度