对角线遍历
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
输出: [1,2,4,7,5,3,6,8,9]
解释:
解题思路
两种移动方向:
- 右上移动:i -= 1,j += 1
- 左下移动:i+=1,j-=1
处理上下左右编辑问题
越界即转弯
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var findDiagonalOrder = function(matrix) {
if(matrix.length < 1){
return []
}
var res = []
var i=0
var j = 0
var n = matrix.length
var m = matrix[0].length
var flag = true
while(i<n && j<m){
res.push(matrix[i][j])
m = matrix[i].length
if(flag){
//右上移动
i -= 1
j += 1
}else{
//左下移动
i += 1
j -= 1
}
//边界处理:转弯
if(i<0 || j<0 || i==n || j==m){
if(flag){
//右上
if(j < m){
i = 0
}else{
i += 2
j--
}
}else{
//左下
if(i < n){
j = 0
}else{
i--
j += 2
}
}
flag = !flag
}
}
return res
};