首页 > 技术文章 > 打印二维数组

shallwebegin 2019-04-21 15:58 原文


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 3
4 5 6
7 8 9
输出并删除第一行后,再进行一次逆时针旋转,就变成:
6 9
5 8
4 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)

 

推荐阅读