• python(leetcode)498. 对角线遍历


    这题难度中等,记录下思路

    第一个会超时,

    第二个:思想是按斜对角线行进行右下左上交替遍历,

     1 def traverse(matrix):
     2     n=len(matrix)-1
     3     m=len(matrix[0])-1
     4     result=[]
     5     for i in range(m+n+1):
     6             if(i % 2 == 0):
     7                 for j in range(i, -1, -1):
     8                     x=j
     9                     y=i-x
    10                     if x <= n and y <= m:
    11                         result.append(matrix[x][y])
    12                     # elif y > m:
    13                     #     break
    14                     else:
    15                         continue
    16             else:
    17                 for j in range(i, -1, -1):
    18                     y=j
    19                     x=i-y
    20                     if x <= n and y <= m:
    21                         result.append(matrix[x][y])
    22                     # elif x > n:
    23                     #     break
    24                     else:
    25                         continue
    26     return result
    27 
    28 if __name__ == '__main__':
    29     ma=[
    30  [ 1, 2, 3 ],
    31  [ 4, 5, 6 ],
    32  [ 7, 8, 9 ]
    33 ]
    34 print(traverse(ma))

    11

     1 def diagonial(matrix):
     2     m=len(matrix)
     3     n=len(matrix[0])
     4     #思想是按斜对角线行进行遍历
     5     #遍历的方向右下,左上交替进行
     6     line=0
     7     res=[]
     8     tem=[]
     9     is_sure=True
    10     #对每一行进行循环 斜对角线有m+n-1条
    11     while line<(m+n-1):
    12     #设置起点
    13         if(line<m):
    14             x=line
    15             y=0
    16         else:
    17             x=m-1
    18             y=line-m-1
    19         #每行循环几次
    20         #因为都是从右上开始,所以设置条件x>0,y<n
    21         while x>=0 and y <n:
    22             # 存储斜行的元素
    23             tem.append(matrix[x][y])
    24             x-=1
    25             y+=1
    26         #如果是左下开始,则反向添加
    27         if(is_sure):
    28             tem.reverse()
    29         for num in tem:
    30             res.append(num)
    31         line+=1
    32     return res
    33 
    34 
    35 if __name__ == '__main__':
    36     matrix=[
    37  [ 1, 2, 3 ],
    38  [ 4, 5, 6 ],
    39  [ 7, 8, 9 ]
    40 ]
    41     print(diagonial(matrix))
  • 相关阅读:
    7-5 幸运彩票 (15分)
    基于Python实现学生管理系统
    NB-IoT模块烧写详细过程
    IAR软件使用的快捷键配置以及配置cc2530环境
    7-54 求方程的解 (10 分)
    7-52 计算球体积 (10 分)
    7-51 号码牌的制作 (10 分)
    7-48 输出星期名缩写 (70 分)
    7-49 求前n项的阶乘之和 (15 分)
    7-46 jmu-python-求单词长度 (10 分)
  • 原文地址:https://www.cnblogs.com/bob-jianfeng/p/11393829.html
Copyright © 2020-2023  润新知