Leetcode 498. Diagonal Traverse

文章作者:Tyan
博客:noahsnail.com  |  CSDN  |  简书

1. Description

Diagonal Traverse

2. Solution

**解析:**Version 1,根据矩阵对角线的规律,对角线的数量为m+n-1,对角线的起点(左下到右上)为第一列加上最后一行的数据,顺序为行数一次加1,列不变,到左下角后,行数不变,列数依次加1,对角线上的数据依次为行减1,列加1。由于是对角线遍历是连续的,因此,行数加列数的和为奇数时,需要反转对角线数据。

  • Version 1
class Solution:
    def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:
        m = len(mat)
        n = len(mat[0])
        result = []
        i = -1
        j = 0
        for _ in range(m+n-1):
            if i != m -1:
                i += 1
            else:
                j += 1
            current_row = i
            current_column = j
            temp = []
            while current_row > -1 and current_column < n:
                temp.append(mat[current_row][current_column])
                current_row -= 1
                current_column += 1
            if (i + j) % 2 == 1:
                result += temp[::-1]
            else:
                result += temp
        return result

Reference

  1. https://leetcode.com/problems/diagonal-traverse/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值