zoukankan      html  css  js  c++  java
  • 算法:由外向内顺时针打印矩阵(n*n)元素

    输入一个矩阵(n*n),按照从外向里以顺时针的顺序依次打印出每一个数字。
    示例 1:
    输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
    输出:[1,2,3,6,9,8,7,4,5]
    限制:
    0 <= matrix.length
    0 <= matrix[i].length 
    import copy
    
    class Solution(object):
    
        def __init__(self):
            self.lis = []
    
        def spiralOrder(self, matrix):
            """
            :type matrix: List[List[int]]
            :rtype: List[int]
            """
            rows = rols = len(matrix)
            if rows < 1:
                return []
            if rows == 1:
                self.lis.append(matrix[0][0])
                return self.lis
            if rows == 2:
                self.lis.append(matrix[0][0])
                self.lis.append(matrix[0][1])
                self.lis.append(matrix[1][1])
                self.lis.append(matrix[1][0])
                return self.lis
            if rows == 3:
                for i in matrix[0]:
                    self.lis.append(i)
                for i in range(1, rols-1):
                    self.lis.append(matrix[i][rols-1])
                for i in range(rols-1, -1, -1):
                    self.lis.append(matrix[rols-1][i])
                for i in range(rols-2, 0, -1):
                    self.lis.append(matrix[i][0])
                self.lis.append(matrix[1][1])
                return self.lis
            if rows > 3:
                for i in matrix[0]:
                    self.lis.append(i)
                for i in range(1, rols-1):
                    self.lis.append(matrix[i][rols-1])
                for i in range(rols-1, -1, -1):
                    self.lis.append(matrix[rols-1][i])
                for i in range(rols-2, 0, -1):
                    self.lis.append(matrix[i][0])
                lic = copy.copy(matrix)
                lic.pop(0)
                lic.pop()
                for i in lic:
                    i.pop(0)
                    i.pop()
                self.spiralOrder(lic)
                return self.lis
    
    s = Solution()
    
    liy = []
    lix = []
    n = 3
    for i in range(1, n*n+1):
        liy.append(i)
    for i in range(n):
        lix.append(liy[i*n : i*n + n])
    
    
    ret = s.spiralOrder(lix)
    print(ret)

    结束!

  • 相关阅读:
    Android 通过外键连接两个数据库
    WustOJ 1575 Gingers and Mints(快速幂 + dfs )
    Android数据库信息显示在listview上
    Android 开机启动通知
    JAVA车票管理系统(简单GUI)
    POJ1159 Palindrome(数位DP)
    python之Memcached 安装及操作
    Django中的缓存
    VUE 框架
    flask----flask-session
  • 原文地址:https://www.cnblogs.com/aaronthon/p/13064757.html
Copyright © 2011-2022 走看看