题目简述:
给你一个列表 nums ,里面每一个元素都是一个整数列表。请你依照下面各图的规则,按顺序返回 nums 中对角线上的整数。
- 此题,突破口:每个斜线上所有元素行和列之和都是相等的。
- 因为每行的元素数都不确定,所以先要确定最大列数m,然后我就开始枚举行列之和从0~m+n-2,然后当前行没有的就跳过,O(n2),TLE。
- 那如何才能不访问那些不存在的元素呢:那我们只能逐行逐列访问了元素了,这样才能避免超时,由于最后答案是一条线上的元素都在一起,那么我们就用个数据结构将所有列+行相等的元素放在一起得了。在这里,可以用字典,但是m+n也没多大,用个动态数组索引也很快。
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& nums) {
vector<int> ans;
int n = (int)(nums.size()),m = 0;
for(vector<int> arr:nums){
m = max(m,(int)arr.size());
}
vector<int> temp[m + n];
for(int i = n - 1;i >= 0;--i){
for(int j = 0;j < nums[i].size();++j)
temp[i + j].push_back(nums[i][j]);
}
for(auto arr:temp){
for(int t:arr) ans.push_back(t);
}
return ans;
}
};