zoukankan      html  css  js  c++  java
  • 矩阵按对角线打印---python

    将一个矩阵(二维数组)按对角线向右进行打印。(搜了一下发现好像是美团某次面试要求半小时手撕的题)
    Example:
    Input:
    [
    [1,2,3,4],
    [5,1,2,3],
    [9,5,1,2]
    ]
    Output:
    [[4],
    [3, 3],
    [2, 2, 2],
    [1, 1, 1],
    [5, 5],
    [9]]

    class Solution():
        def print_matix(self,list):
            print(list)
            rows = len(list)
            cols = len(list[0])
            result = []
            for k in range(2*cols-1):    # 共输出 cols * 2 - 1 行
                diff = cols - k - 1  # 每一行的差
                for i in range(cols):    # 数组中每一个值的下标范围是0到cols
                    for j in range(cols):
                        if j-i == diff:
                            print(list[i][j])
                            result.append(list[i][j])
                print()
    
            print(result)
            return result
    
        def diagonal_right(self,matrix):
            if not matrix:
                return []
            row = len(matrix)
            col = len(matrix[0])
            col2 = col
            result = []
            for i in range(row):
                for j in range(col2 - 1, -1, -1):  # j倒序遍历
                    lst = []
                    i1, j1 = i, j  # i1,j1用于方便同一对角线元素的添加,否则改变i,j影响开头元素的选择
                    while i1 <= row - 1 and j1 <= col - 1:
                        lst.append(matrix[i1][j1])
                        j1 += 1
                        i1 += 1
                    result.append(lst)
                    if i == 0 and j == 0:  # 当遍历完(0,0)开头的一条对角线后,让j固定为0
                        col2 = 1
            return ('the result is: %s' % result, 'end')
    
    
    
    if __name__ == '__main__':
         list = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
         solution = Solution()
         solution.print_matix(list)
         result = solution.diagonal_right(list)
         print(result)
  • 相关阅读:
    C版程序语法 (消除左递归)
    文法
    201506110248 实验报告
    组合数据类型
    UBUNTU四种版本的区别【转】
    MFC对话框程序屏蔽回车与ESC键,Tab键
    std::fstream打开中文路径名失败的问题原因、解决方法以及注意事项
    前进。。。。。。
    程序员学习能力提升三要素[转]
    java学习推荐资源
  • 原文地址:https://www.cnblogs.com/turningli/p/12460534.html
Copyright © 2011-2022 走看看