劍指offer面試題29. 順時針打印矩陣(邊界問題)

題目描述

輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字。
在這裏插入圖片描述

思路

詳見鏈接

代碼

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 爲必須使用的空間)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章