题目来源
题目描述
题目描述
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& nums) {
}
};
题目解析
八皇后的变形问题。
对于:
[
[1,2,3,4,5],
[6,7],
[8],
[9,10,11],
[12,13,14,15,16]
]
需要输出为:
[1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]
单看坐标
[
[(0,0),(0,1),(0,2),(0,3),(0,4)]
[(1,0),(1,1)]
[(2,0)]
[(3,0),(3,1),(3,2)]
[(4,0),(4,1),(4,2),(4,3),(4,4)]
]
转化为
[
[0,1,2,3,4]
[1,2]
[2]
[3,4,5]
[4,5,6,7,8]
]
直接按标号分组
[[0][1,1][2,2,2][3,3][4,4,4][5,5][6][7][8]]
然后合起来就是了(合的过程要注意加入的顺序)
模拟
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& nums) {
std::map<int, std::vector<int>> m;
for (int i = 0; i < nums.size(); ++i) {
for (int j = 0; j < nums[i].size(); ++j) {
m[i + j].insert( m[i + j].begin(), nums[i][j]);
}
}
std::vector<int> ans;
for(auto it : m){
ans.insert(ans.end(), it.second.begin(), it.second.end());
}
return ans;
}
};