题目位置
题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵,则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路:
这个思路不是剑指offer上面的,我觉得比较简单,搬过来跟大家一起学习下。
我们可以把打印一圈分为四步:
第一步:从左到右打印一行
第二步:从上到下打印一列
第三步:从右到左打印一行
第四步:从下到上打印一列
代码中分别用两个指针来控制这四个方向,right_pointer和down_pointer。
当right_pointer等于1时,说明为从左到右打印。
当right_pointer等于-1是,说明为从右到左打印。
当right_pointer等于0时,说明跟它无关了,转去看down_pointer。
当down_pointer等于1是,说明为从上向下打印。
当down_pointer等于-1时,说明为从下向上打印。
当down_pointer等于0时,说明跟它无关了,转去看right_pointer。
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
m = len(matrix)
n = len(matrix[0])
answer = []
number = 1
if m == 0:
return answer
i = j = 0
#定义四个边界
upper_i = 0
lower_i = m - 1
left_j = 0
right_j = n -1
#定义两个方向指针,默认情况为指针向右
right_pointer = 1
down_pointer = 0
while(number <= m*n):
answer.append(matrix[i][j])
if right_pointer == 1:
if j < right_j:
j = j+1
else:
right_pointer = 0
down_pointer = 1
upper_i = upper_i + 1
i = i + 1
elif down_pointer == 1:
if i < lower_i:
i = i + 1
else:
down_pointer = 0
right_pointer = -1
right_j = right_j -1
j = j -1
elif right_pointer == -1:
if j > left_j:
j = j -1
else:
right_pointer = 0
down_pointer = -1
lower_i = lower_i -1
i = i -1
elif down_pointer == -1:
if i > upper_i:
i = i - 1
else:
down_pointer = 0
right_pointer = 1
left_j = left_j + 1
j = j + 1
number = number + 1
return answer
借鉴来源:https://blog.csdn.net/tinkle181129/article/details/79326023