Spiral Matrix

来源:互联网 发布:一级建造师 网络教育 编辑:程序博客网 时间:2024/06/07 02:50

题目详情: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
原创粉丝点击