class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
result = []
while(matrix):
result+=matrix.pop(0)
if not matrix or not matrix[0]:
break
matrix = self.turn(matrix)
return result
def turn(self,matrix):
num_r = len(matrix)
num_c = len(matrix[0])
newmat = []
for i in range(num_c):
newmat2 = []
for j in range(num_r):
newmat2.append(matrix[j][i])
newmat.append(newmat2)
newmat.reverse()
return newmat
新:可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作例如1 2 34 5 67 8 9输出并删除第一行后,再进行一次逆时针旋转,就变成:6 95 84 7常规操作:设置上下左右四个指针,按圈数来打印。偶数行矩阵可以通过。奇数行矩阵会剩中间一个不打印,why
arr = [[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]]
left = 0
top = 0
right = len(arr[0])-1
bottom = len(arr)-1
res = []
while left <= right and top <= bottom:
i = left
j = top
k = right
t = bottom
while i < right: # 第一行取到right之前
res.append(arr[top][i])
i += 1 # 第一行最后一个不取
while j < bottom: # 最右边的一列取到bottom之上
res.append(arr[j][right])
j += 1
while k > left: # 最下面一行 取到left之前
res.append(arr[bottom][k])
k -= 1
while t > top: # 最左边一列 取到top之下
res.append(arr[t][left])
t -= 1
left += 1
top += 1
right -= 1
bottom -= 1
print(res)
之字形打印二维数组:
重点是如何打印出二维数组的左右、上下半角。设置转向标记控制打印方向。
# arr = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
arr = [[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]]
n = len(arr)
res = []
flag = 1 # 转向标记
for x in range(n): # 打印左上半角
i = 0
while i <= x:
if flag == 1:
res.append(arr[i][x-i])
else:
res.append(arr[x-i][i])
i += 1
flag = -flag
"""
for i in range(n): # 打印数组左上半角
for j in range(i+1):
if flag == 1:
res.append(arr[j][i-j])
else:
res.append(arr[i-j][j])
flag = -flag"""
for x in range(n, 2*n-1): # 右下半角
i = n-1
while i <= n and x-i < n: # 第i行第x-i个
if flag == -1:
res.append(arr[i][x-i])
else:
res.append(arr[x-i][i])
i -= 1
flag = -flag
print(res)