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)
  • 相关阅读:
    标题栏外区域拖动窗体
    搜索引擎技术核心揭密
    用C#实现木马程序(转载)
    DotNet里的控件数组
    RECORDNUMBER应用之控制每页显示行数及隔行换色
    搜索引擎技术学习
    VB里面操作Excel(居然比C#强)
    第三代搜索引擎技术与P2P
    C# 用API播放声音
    如何判断ExecuteScalar()得到的结果是否有记录
  • 原文地址:https://www.cnblogs.com/shallwebegin/p/10745506.html
Copyright © 2011-2022 走看看