# 第95期-基础结构:矩阵 螺旋矩阵

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 1 问题描述

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

image.jpg
输入: matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出: [1,2,3,6,9,8,7,4,5]

示例 2:

image.jpg
输入: 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]]))
1
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]]))
1
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

代码运行结果为:
image.jpg

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM