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

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]]))
View Code

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]]))
View Code

第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

 

posted @ 2022-01-06 20:44  LG03  阅读(65)  评论(0)    收藏  举报