zoukankan      html  css  js  c++  java
  • 打印二维数组


    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)
  • 相关阅读:
    Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点
    Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
    Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线
    Civil 3D 二次开发 新建CLR项目出现错误C2143
    Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
    了解AutoCAD对象层次结构 —— 6 ——块表记录
    datepicker97使用
    使用angular 外接 templateUrl,使用ng-include
    angularJs 遮罩
    网上找的有关css兼容问题
  • 原文地址:https://www.cnblogs.com/shallwebegin/p/10745506.html
Copyright © 2011-2022 走看看