剑指offer面试题29. 顺时针打印矩阵(边界问题)

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
剑指offer面试题29. 顺时针打印矩阵(边界问题)_第1张图片

思路

详见链接

代码

class Solution:
	def spiralOrder(self, matrix:[[int]])->[int]:
		if not matrix:
			return []
		l, r, t, b, res = 0, len(matrix[0])-1, 0, len(matrix)-1, []
		while True:
			for i in range(l, r+1):
				res.append(matrix[t][i])
			t += 1
			if t > b: break
			 
			for i in range(t, b+1):
				res.append(matrix[i][r])
			r -= 1
			if l > r: break

			for i in range(r, l-1, -1):
				res.append(matrix[b][i])
			b -= 1
			if t > b: break
			
			for i in range(b, t-1, -1):
				res.append(matrix[i][l])
			l += 1
			if l > r: break
		return res

复杂度

时间复杂度 O(MN): M, N分别为矩阵行数和列数。
空间复杂度 O(1) : 四个边界 l , r , t , b 使用常数大小的额外空间( res 为必须使用的空间)。

你可能感兴趣的:(剑指offer,顺时针打印矩阵,边界问题,剑指offer,Python)