54.螺旋矩阵(中等)
给你一个m行n列的矩阵matrix请按照顺时针螺旋顺序返回矩阵中的所有元素。示例 1输入matrix [[1,2,3],[4,5,6],[7,8,9]]输出[1,2,3,6,9,8,7,4,5]示例 2输入matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出[1,2,3,4,8,12,11,10,9,5,6,7]提示m matrix.lengthn matrix[i].length1 m, n 10-100 matrix[i][j] 100class Solution: def spiralOrder(self, matrix: List[List[int]]) - List[int]: left,right,top,below0,len(matrix[0])-1,0,len(matrix)-1 res[] while True: for i in range(left,right1): res.append(matrix[top][i]) top1 if topbelow: break for i in range(top,below1): res.append(matrix[i][right]) right-1 if leftright: break for i in range(right,left-1,-1): res.append(matrix[below][i]) below-1 if topbelow: break for i in range(below,top-1,-1): res.append(matrix[i][left]) left1 if leftright: break return res主要思想是设立上下左右四个边界根据边界打印打印完之后边界向内收缩1表示已打印如果边界相遇说明打印已完成。首先在第一行开始从左到右打印打印完第一行之后上边界下移也就是top加一然后从上边界开始从上到下打印打印完后右边界左移然后从右边界从右到左打印下边界上移然后从下边界从下到上打印一直如此循环。打印行的时候只需要看上边界是否大于下边界如果大于就退出表示打印完了同样打印列的时候看左边界是否大于右边界大于就退出。模拟过程假设矩阵是3行3列matrix [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]初始l0, r2, t0, b2第一轮循环从左到右res.append(matrix[0][0..2])→[1,2,3]t 1→t1从上到下res.append(matrix[1..2][2])→[1,2,3,6,9]r - 1→r1从右到左res.append(matrix[2][1..0])→[1,2,3,6,9,8,7]b - 1→b1从下到上res.append(matrix[1..0][0])→[1,2,3,6,9,8,7,4]l 1→l1此时边界l1, r1, t1, b1第二轮循环开始从左到右res.append(matrix[1][1..1])→[1,2,3,6,9,8,7,4,5]t 1→t2检查if t b: break现在t2,b12 1成立 ✅break 退出循环
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2427290.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!