题解 | #螺旋矩阵#

螺旋矩阵

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

#
# 
# @param matrix int整型二维数组 
# @return int整型一维数组
#
class Solution:
    def spiralOrder(self , matrix ):
        # write code here
        result = []
        m = len(matrix)
        if(m == 0): return result
        n = len(matrix[0])
        c = (2*m - 1) if (m<=n) else 2*n
        if(c<=0): return result
        i = 0
        j = 0
        result.append(matrix[0][0])
        for k in range(1,c+1,1):
            if(k%4 == 0):
                for j in range(j-1,k//4-1,-1):
                    result.append(matrix[j][i])
            elif(k%4 == 1):
                for i in range(i+1,(n-k//4),1):
                    result.append(matrix[j][i])
            elif(k%4 == 2):
                for j in range(j+1,(m-k//4),1):
                    result.append(matrix[j][i])
            elif(k%4 == 3):
                for i in range(i-1,k//4-1,-1):
                    result.append(matrix[j][i])
        return result
全部评论
因为循环为 i++ j++ i-- j-- 周期进行,所以先写一个大的循环,然后分四种情况写四种循环,再确定每种循环的起止点。以i++为例,假设上一个循环结束后的,append的是matrix[a][b],则i++循环b不变,i起点为a+1,终点为n减去执行j++操作的次数,即n-k//4。同理可以推出另外三种情况的循环起止点。注意一下for循环左闭右开
点赞 回复 分享
发布于 2021-10-27 17:41
存一下,之前没有做过这种题 大概思路:每次循环 i++ j++ i-- j-- 然后又是i++ j++ i-- j-- 根据这种特性,写循环 首先确定循环次数,首先每次执行i++或i--说明遍历了一行,执行完j++或j--则遍历了一列,当每行或每列遍历完了,循环结束,所以要先确定行先遍历完还是列先遍历完,遍历顺序是行、列、行、列,所以如果行<=列时,行先遍历完,即最后一项遍历为行,即行、列、行……列、行。所以次数为2*(m-1)+1=2*m-1,否则列先遍历完,即行、列、行……列,循环次数为2*n
点赞 回复 分享
发布于 2021-10-27 17:22
螺旋矩阵 描述 给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。 数据范围:0 \le n,m \le 100≤n,m≤10,矩阵中任意元素都满足 |val| \le 100∣val∣≤100 要求:空间复杂度 O(nm)O(nm) ,时间复杂度 O(nm)O(nm)
点赞 回复 分享
发布于 2021-10-27 17:08

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务