# 第95期-基础结构:矩阵 螺旋矩阵
Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。
# 1 问题描述
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入: matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
初始代码
from typing import List
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
#在此之间填写代码
print(Solution().spiralOrder([[1,2,3],[4,5,6],[7,8,9]]))
print(Solution().spiralOrder([[1,2,3,4],[5,6,7,8],[9,10,11,12]]))
2
3
4
5
6
7
# 2 解题思路
- 标签:矩阵
- 使用笨方法逐个按顺序遍历
# 3 解题方法
from typing import List
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
m=len(matrix)
n=len(matrix[0])
i,j=0,0
a,p=[matrix[i][j]],0
matrix[i][j]=''
while p<=4:
while j+1<n and matrix[i][j+1]!='':
j+=1
a.append(matrix[i][j])
matrix[i][j]=''
p=0
p+=1
while i+1<m and matrix[i+1][j]!='':
i+=1
a.append(matrix[i][j])
matrix[i][j]=''
p=0
p+=1
while j-1>=0 and matrix[i][j-1]!='':
j-=1
a.append(matrix[i][j])
matrix[i][j]=''
p=0
p+=1
while i-1>=0 and matrix[i-1][j]!='':
i-=1
a.append(matrix[i][j])
matrix[i][j]=''
p=0
p+=1
return a
print(Solution().spiralOrder([[1,2,3],[4,5,6],[7,8,9]]))
print(Solution().spiralOrder([[1,2,3,4],[5,6,7,8],[9,10,11,12]]))
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
第1-3,37-38行: 题目中已经给出的信息,运行代码时要根据这些代码进行编辑
第4-8行: 定义变量m、n、i、j、p并分别赋值矩阵宽度,长度,0,0,0,i,j是索引,p是结束条件,列表a存放矩阵第一个元素
第9行: 当p小于四的时候执行循环
第10-15行: 从刚刚结束位置向右走直到遇到矩阵边界或者之前索引过的值,将这些值都存入列表a中,若执行了这些操作,令p=0后加1
第16-21行: 从刚刚结束位置向下走直到遇到矩阵边界或者之前索引过的值,将这些值都存入列表a中,若执行了这些操作,令p=0后加1
第22-27行: 从刚刚结束位置向左走直到遇到矩阵边界或者之前索引过的值,将这些值都存入列表a中,若执行了这些操作,令p=0后加1
第28-33行: 从刚刚结束位置向上走直到遇到矩阵边界或者之前索引过的值,将这些值都存入列表a中,若执行了这些操作,令p=0后加1
第34行: 只要经过一次转弯,p就不可能等于4,若p等于4,则便利到最后一点,结束循环并返回列表a
代码运行结果为:
# 4 视频解析
高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码