输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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]
方法:
i,j为两个指针;n和m分别为列行最大序号;p为循环计数,第p次大循环;stop为总个数,当re数组中有stop个数时截止。
- 右→下→左→上,为一个循环
- 在“右”当中:i 不变,j++,至最大,最大=n-p
- 在“下”当中:j 不变,i++,至最大,最大=m-p
- 在“左”当中:i不变,j–,至最小,最小=p
- 在“上”之前p = p+1,要注意再循环末尾“上”中边界就变了
- 在“上”当中:j不变,i–,至 最小 ,最小=p
Python代码:
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
if matrix == []:
return matrix
m = len(matrix)-1
n = len(matrix[0])-1
i, j = 0, 0
p = 0
re = []
stop = (n+1)*(m+1)
re.append(matrix[i][j])
if stop == 1:
return re
while(1):
while(j != (n-p)):
j+=1
re.append(matrix[i][j])
if len(re) == stop:
return re
while(i != (m-p)):
i+=1
re.append(matrix[i][j])
if len(re) == stop:
return re
while(j != p):
j-=1
re.append(matrix[i][j])
if len(re) == stop:
return re
p+=1
while(i != p):
i-=1
re.append(matrix[i][j])
if len(re) == stop:
return re
感冒了,边擦鼻涕边写的思路,若有不对的地方,还望指正