zoukankan      html  css  js  c++  java
  • 【leetcode】Spiral Matrix

    题目概要:

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

    For example,
    Given the following matrix:

    [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
    You should return [1,2,3,6,9,8,7,4,5].

    解题思路:

    这个题的关键在于指针的计算,一定要细心,我们用四个量分别表示行和列的起始位置和结束位置,每次进行四个循环,将得到的数字加入返回列表,同时修改相应的指针值,同时我们要注意到这样得到的列表是会有冗余的,我们只要截取最前面的就可以。
    具体的修改过程:
    1.从左到右,结束后因为对应的最开始一行已经遍历完成,所以标记行的开始的要自增
    2.从上到下,结束后最后一列已经完成,故标记列的结束的要自减
    3.从右到左,结束后最下一行已经完成,故标记行的结束的自减
    4.从下到上,结束后第一列已经完成,故标记列的自增
    这里也可以看出,会有重复的计算的,但是重复小于一圈,故可以直接采用截断的方式,当然在循环中加入判断亦可以达到这个目的。

    class Solution:
        # @param matrix, a list of lists of integers
        # @return a list of integers
        def spiralOrder(self, matrix):
            if len(matrix) == 0:
                return []
            r, c = len(matrix), len(matrix[0])
            if c == 0:
                return []
            roundr = 0
            roundc = 0
            res = []
            while roundr < r and roundc < c:
                for i in range(roundc, c):
                    res.append(matrix[roundr][i])
                roundr += 1
                for i in range(roundr, r):
                    res.append(matrix[i][c-1])
                c -= 1
                for i in range(c-1,roundc-1,-1):
                    res.append(matrix[r-1][i])
                r -= 1
                for i in range(r-1,roundr-1,-1):
                    res.append(matrix[i][roundc])
                roundc += 1
            return res
            #return res[0:len(matrix)*len(matrix[0])];
    
    s = Solution()
    print s.spiralOrder([
     [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ]
    ])
    print s.spiralOrder([[7],[9],[6]])
    print s.spiralOrder([[7,9,6]])
  • 相关阅读:
    线上项目部署
    day26 面向对象 单例模式总结
    阿里云服务器,更换操作系统步骤总结
    后端for循环补充
    前端,css
    django-admin 仿写stark组件action,filter筛选过滤,search查询
    7.20晚作业
    用户和群组管理
    7.19 晚作业
    目录和文件管理
  • 原文地址:https://www.cnblogs.com/MrLJC/p/4192685.html
Copyright © 2011-2022 走看看