剑指 Offer 29. 顺时针打印矩阵

题目

在这里插入图片描述

剑指offer的解题思路

  1. 顺时针打印矩阵,可以分解为每次打印一个数,顺序是从左到右,从上到下,然后从右到左,从下到上。
  2. 打印每一圈的起点(startX,startY)分别为(0,0)(1,1)… 起点的横坐标与纵坐标相同,没打印完一圈后+1. 打印的退出条件是startX2>=columns 或 startX2>=rows.
  3. 不是每一打印都能打印完整的一圈的。情况如下:
    在这里插入图片描述
class Solution:def spiralOrder(self, matrix):if not matrix:return []result = []rows = len(matrix)columns = len(matrix[0])# for i in range(rows // 2):#     for j in range(columns // 2):i = 0result = []while i*2 <rows and i*2 < columns:# 每一轮的起点相同for h in range(i,columns - i):# 从左到右print('j,columns -j,h',i,columns -i,h)print('left to right',matrix[i][h])result.append(matrix[i][h])if rows - 2*i >=2:for v in range(i+1,rows -i):# 从上到下# print('up to down',matrix[v][columns - j - 1])result.append(matrix[v][columns - i - 1])if  rows - 2*i >=2 and columns - 2*i >=2:for h in range(columns-i-2,i-1,-1):# 从右到左# print('h',h)# print('right to left',matrix[rows - i -1][h])result.append(matrix[rows - i -1][h])# print(matrix[rows - i -1][h])if columns - 2*i >= 2 and rows - 2*i >= 3:for v in range(rows - i - 2,i,-1):# 从下到上# print('last',matrix[v][j])result.append(matrix[v][i])# print(matrix[v][j])i += 1return result

想不到的方法

ss Solution:def spiralOrder(self, matrix):res = []while matrix:res += matrix.pop(0)print('res',res)matrix = list(zip(*matrix))[::-1]return res


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部