python | #螺旋矩阵#

螺旋矩阵

http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31

#
# 
# @param matrix int整型二维数组 
# @return int整型一维数组
#
class Solution:
    def spiralOrder(self , matrix ):
        # write code here
        if len(matrix)==0:
            return matrix
        m = 0
        n = len(matrix)-1 #行数
        a = 0
        b = len(matrix[0])-1 #列数
        result = [] #保存结果
        #保证输入矩阵行列数量都大于等于2
        if n ==0 and b==0: #一行一列
            return matrix[0]
        elif n==0: #一行
            return matrix[0]
        elif b==0: #一列
            return [x[0] for x in matrix]
        while m<n and a < b:
            result.extend(self.circle(matrix, m, n, a, b))
            a+=1
            m+=1
            n-=1
            b-=1
        if m==n and a==b:#中间只剩一个值的情况(奇数方阵)
            result.append(matrix[m][a])
            return result
        elif m>n and a>b:#中间没有值(偶数方阵)
            pass
        elif m==n:#中间还剩一行
            result.extend(matrix[m][a:b+1])
        elif a==b:#中加还有一列
            result.extend([x[a] for x in matrix[m:n+1]])
        return result 
    def circle(self,matrix,m,n,a,b):
        '''
        读取m,n行与a,b列交叉形成的矩形边的值
        m<n,a<b
        '''
        tem = []
        tem.extend(matrix[m][a:b+1]) # 向右
        for i in range(m+1,n): #向下
            tem.append(matrix[i][b])
        tem.extend(reversed(matrix[n][a:b+1])) #向左
        for j in range(n-1,m,-1): #向上
            tem.append(matrix[j][a])
        return tem 

注意!此信息未认证,请谨慎判断信息的真实性!

全部评论
空

相关内容推荐

头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享

全站热榜

正在热议