打印二維數組



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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM