/**
* @param {number[][]} matrix
* @return {number[]}
*/
var findDiagonalOrder = function(matrix) {
if (matrix == null || matrix.length == 0) return []
let m = matrix.length
let n = matrix[0].length
let i = 0
let j = 0
// 预先创建好固定数量的数组
let result = new Array(m*n)
for(let k=0;k<result.length;k++){
// 每一次遍历将值存放在数组中
result[k] = matrix[i][j]
// i + j 即为遍历的层数,偶数向上遍历,奇数向下遍历
if((i+j)%2 == 0){
// 偶数向上遍历
if(j == n-1){
// 如果走到右上角则向下移动
i++
}else if(i == 0){
// 如果没走到右上角只是走到了第一行则向右移动
j++
}else{
// 向斜上走,每一次行减一,列加一
i--
j++
}
}else{
// 奇数向下遍历
if(i == m-1){
// 如果走到左下角则向右移动
j++
}else if(j == 0){
// 如没走到左下角只是走到了第一列则向下移动
i++
}else{
// 向斜下走,每一次行加一,列减一
i++
j--
}
}
}
return result
};
对角线遍历
最新推荐文章于 2022-06-14 19:19:32 发布