Spiral Matrix

本文分享了LeetCode上螺旋矩阵II问题的解题过程,采用逐行逐列访问的方法,确保每个元素只被访问一次,通过判断条件避免重复访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目详情:https://leetcode.com/problems/spiral-matrix-ii/description/

这道题以前遇到过,记得好想是用双循环做的,但是现在忘记了,又做了一遍。一开始的思路是把矩阵当作方方正正的矩阵了,没有考虑到矩阵可能是”扁”的,导致结果出错。然后想到一行,一列的访问,但是此时还有个问题是有个问题可能访问了不止一遍。所以在访问完每行每列之后,判断是否访问完成。

# -*- coding:utf-8 -*-
class Solution(object):
    def spiralOrder(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[int]
        """
        ans=[]
        i=0
        m=len(matrix)#得到矩阵的行数
        if m==0:#如果没有行元素,即没有元素
            return []#那么直接返回
        n=len(matrix[0])#得到矩阵的列数。m*n
        row,column=0,0
        while len(ans)<m*n:
            while column<=n-1-i:#访问最上边未访问过的行,并且一直访问到最后一个元素为止
                ans.append(matrix[row][column])
                column=column+1
            if len(ans)==m*n:#如果访问了这一行之后正好将矩阵中的元素全部访问完
                break#那么直接返回
            row,column=row+1,column-1#如果没有访问完,那么为访问最右边未访问的列做准备
            while row<=m-1-i:#访问最右边未访问过的列并且一直访问到右列的最后一个元素
                ans.append(matrix[row][column])
                row=row+1
            if len(ans)==m*n:
                break
            row,column=row-1,column-1#为访问元素做准备
            while column>=i:#访问最下边未访问过的行并一直访问最后一个元素
                ans.append(matrix[row][column])
                column=column-1
            if len(ans)==m*n:
                break
            row,column=row-1,column+1#为访问元素做准备
            while row>i:#访问最左边未访问过的列
                ans.append(matrix[row][column])
                row=row-1
            if len(ans)==m*n:
                break
            row,column=row+1,column+1#为访问下一个元素做准备
            i=i+1
        return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值