题目描述
var findDiagonalOrder = function (matrix) {
//空数组的情况
if (matrix.length == 0) {
return [];
}
// N*1的数组
if (matrix[0].length == 1) {
return matrix;
}
//普遍情况
//数组长度
var m = matrix.length;
var loc = 0;
var ver = 1;
var ano = [];
var sum = 1;
var len = matrix[0].length + matrix.length - 1;
for (var i = 0; i < len; i++) {
var row = 0;
ano[i] = [];
if (i <= matrix[0].length - 1) {
ano[i].push(matrix[row][loc]);
loc++;
var col = i;
if (i > 0 && i < matrix[0].length) {
if (0 < loc < matrix[0].length + 1) {
while (!(row == m - 1 || col == 0)) {
//
ano[i].push(matrix[++row][--col]);
}
row = 0;
}
}
} else {
ano[i] = [];
ver = sum;
var thecol = matrix[0].length - 1;
while (ver < matrix.length && thecol >= 0) {
ano[i].push(matrix[ver++][thecol--]);
}
sum++;
}
}
// console.log(ano);
ano.forEach(function (item, index) {
if (index % 2 == 0) {
item.reverse();
}
});
var res = ano.reduce((a, b) => {
return a.concat(b);
}, []);
console.log(ano);
// console.log(res);
return res;
};
思路:
先确定每条对角线的遍历起点,然后以左下角的方向遍历,即array[i+1][j-1]
每条对角线先以数组存储起来。然后将相应位置的数组逆序排列,即可解此题。