Leetcode 1424. Diagonal Traverse II
题目链接: Diagonal Traverse II
难度:Medium
题目大意:
将数组按照题目所要求的对角线的顺序重新排列,返回排列后的数组。
思路:
题目中同一条对角线上的元素行坐标与纵坐标之和相等。用HashMap来存储同一条对角线上的元素,然后按照题目的要求来排列。本文参考高赞回答
代码
class Solution {//参考高赞回答
public int[] findDiagonalOrder(List<List<Integer>> nums) {
Map<Integer,List<Integer>> map=new HashMap<>();
int n=0,keyMax=0;//n表示元素的个数,keyMax表示行坐标加纵坐标之和的最大值
for(int r=nums.size()-1;r>=0;r--){//一条对角线上的第一个元素的r最大c最小
for(int c=0;c<nums.get(r).size();c++){
map.putIfAbsent(r+c,new ArrayList<Integer>());
map.get(r+c).add(nums.get(r).get(c));
n++;
keyMax=Math.max(keyMax,r+c);
}
}
int[] res=new int[n];
int i=0;
for(int key=0;key<=keyMax;key++){
List<Integer> list=map.get(key);
if(list==null){
continue;
}
for(int v:list){
res[i++]=v;
}
}
return res;
}
}