欢迎光临散文网 会员登陆 & 注册

LeetCode 1424. Diagonal Traverse II

2023-04-20 12:27 作者:您是打尖儿还是住店呢  | 我要投稿

Given a 2D integer array nums, return all elements of nums in diagonal order as shown in the below images.

 

Example 1:

Input: nums = [[1,2,3],[4,5,6],[7,8,9]]

Output: [1,4,2,7,5,3,8,6,9]

Example 2:

Input: nums = [[1,2,3,4,5],[6,7],[8],[9,10,11],[12,13,14,15,16]]

Output: [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]

 

Constraints:

  • 1 <= nums.length <= 105

  • 1 <= nums[i].length <= 105

  • 1 <= sum(nums[i].length) <= 105

  • 1 <= nums[i][j] <= 105

在一个对角线是有一个规律的,就是同一个对角线上面的index相加是一样的,因为i++的时候,j--了,所以i+j是一样的,

考虑到这一点,我们就把i+j 放到map中的key中,然后相同的i+j对应的数值就放在list中,

依次去遍历list即可。

只是这里面要有2个变量,1个是得知道map中key的范围,也就是从0到最下面一个list的末尾的值。我们用math.max()去遍历即可;

另一个变量就是数组的长度,我们在遍历list的时候,用给一个变量去每次保存list的长度即可;

剩下就是将map中的list,根据key值依次放到数组中,但是这里面需要注意的是,

我们遍历的时候,是同一个list,然后list里面的index累加,这时候的顺序正好是反着的,

所以要j--去依次放入对应的数值。

下面就是代码了,有问题可以联系;

Runtime: 41 ms, faster than 72.38% of Java online submissions for Diagonal Traverse II.

Memory Usage: 69.7 MB, less than 55.25% of Java online submissions for Diagonal Traverse II.

难得的有思路就直接过了。。。

LeetCode 1424. Diagonal Traverse II的评论 (共 条)

分享到微博请遵守国家法律