LeetCode 1424. Diagonal Traverse II
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
在一個(gè)對(duì)角線是有一個(gè)規(guī)律的,就是同一個(gè)對(duì)角線上面的index相加是一樣的,因?yàn)閕++的時(shí)候,j--了,所以i+j是一樣的,
考慮到這一點(diǎn),我們就把i+j 放到map中的key中,然后相同的i+j對(duì)應(yīng)的數(shù)值就放在list中,
依次去遍歷list即可。
只是這里面要有2個(gè)變量,1個(gè)是得知道m(xù)ap中key的范圍,也就是從0到最下面一個(gè)list的末尾的值。我們用math.max()去遍歷即可;
另一個(gè)變量就是數(shù)組的長度,我們?cè)诒闅vlist的時(shí)候,用給一個(gè)變量去每次保存list的長度即可;
剩下就是將map中的list,根據(jù)key值依次放到數(shù)組中,但是這里面需要注意的是,
我們遍歷的時(shí)候,是同一個(gè)list,然后list里面的index累加,這時(shí)候的順序正好是反著的,
所以要j--去依次放入對(duì)應(yīng)的數(shù)值。
下面就是代碼了,有問題可以聯(lián)系;
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.
難得的有思路就直接過了。。。