赞
踩
题目描述如下:
这个题目的要求差不多就是将矩阵按照对角线输出,不足的部分用0补齐,主要的难点就是对矩阵的对角线输出。
首先我们以3阶为例,为了清晰,下面将A[0][0]记为(0,0),那么最后的B矩阵就是[ [(0,0),0,0] , [(1,0),(0,1),0]] , [(2,0),(1,1),(0,2)] , [(2,1),(1,2),0] , [(2,2),0,0] ].我们把其中的非0项提出来看一下:
(0,0)
(1,0),(0,1)
(2,0),(1,1),(0,2)
(2,1),(1,2)
(2,2)
我们把上面的括号内左边记为i,右边记为j,即(i,j).先观察前三行(以三阶为例,m阶就是m行),每列开头的i依次由0增加到2(即m-1),而j保持0不变,同时观察每一行发现每行的i都从左往右依次-1直到i == 0,j从左往右依次+1一直到该行i的初始值(第一行0,第二行1,第三行2).同时当处理完开头为(2,0)的行后,需要将后续行的i固定为2(即m-1),则有了以下代码:
def func4(lst:list): lst_result = [] m = len(lst) start = 0 for j in range(m): for i in range(start,m): lst1 = [] i1,j1 = i,j while i1>=0 and j1<=i: lst1.append(lst[i1][j1]) i1 -= 1 j1 += 1 while len(lst1) != m: lst1.append(0) lst_result.append(lst1) #当进行到(lst[m-i][0],0)开头时,固定i为m-1 if i == m-1 and j == 0: start = m-1 return lst_result
有了这个矩阵对角线输出的例子(从下到上,从左往右),上下左右任意组合顺序对矩阵进行对角线输出都是同理,只需先列出相应的项,找到他们之间的规律,对代码进行稍加修改就能实现所需要的功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。