(1)59. 螺旋矩阵
题目描述:
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
解题思路:
模拟,对边界值的判定
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
arr = [[0 for i in range(n)] for i in range(n)]
left, top = 0, 0
right, bottom = n-1, n-1
num, numsize = 1, n*n
while True:
for i in range(left, right+1):
arr[top][i] = num
num += 1
top += 1
if num > numsize:break
for i in range(top, bottom+1):
arr[i][right] = num
num += 1
right -= 1
if num > numsize:break
for i in range(right, left-1, -1):
arr[bottom][i] = num
num += 1
bottom -= 1
if num > numsize:break
for i in range(bottom, top-1, -1):
arr[i][left] = num
num += 1
left += 1
if num > numsize:break
return arr
(2)54.螺旋矩阵Ⅰ
题目描述:
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
解题思路:
同(1),就是将赋值改完添加即可
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
res = []
left, top = 0, 0
right, bottom = len(matrix[0])-1, len(matrix)-1
num, numsize = 1, len(matrix[0])*len(matrix)
while True:
for i in range(left, right+1):
res.append(matrix[top][i])
num += 1
top += 1
if num > numsize:break
for i in range(top, bottom+1):
res.append(matrix[i][right])
num += 1
right -= 1
if num > numsize:break
for i in range(right, left-1, -1):
res.append(matrix[bottom][i])
num += 1
bottom -= 1
if num > numsize:break
for i in range(bottom, top-1, -1):
res.append(matrix[i][left])
num += 1
left += 1
if num > numsize:break
return res
(3)剑指Offer 29.顺时针打印矩阵
题目描述:
同(2)原题