第95期-基础结构:矩阵 螺旋矩阵
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 解题方法
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-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
代码运行结果为:



浙公网安备 33010602011771号