使用 JavaScript 对矩阵进行对角遍历
问题
我们需要编写一个 JavaScript 函数,该函数接收一个方阵(一个包含相同行和列数的数组数组)。该函数应斜向遍历该数组数组,并准备一个新数组,其中包含以遍历时遇到的顺序放置的元素。
例如,如果输入函数的是 -
const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
那么输出应该是 -
const output = [1, 2, 4, 7, 5, 3, 6, 8, 9];
示例
代码如下 -
const arr = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
const findDiagonalOrder = (arr = []) => {
if(!arr.length){
return [];
};
let ind = 0;
let colBegin = 0, rowBegin = 0;
let rowMax = arr.length, colMax = arr[0].length;
const res = [], stack = [];
while(rowBegin< rowMax || colBegin<colMax) {
for(let row = rowBegin, col = colBegin; row < rowMax && col >=0 ;
row++,col--){
if(ind%2 === 0){
stack.push((arr[row][col]));
}else{
res.push(arr[row][col]);
};
};
ind++;
while(stack.length){
res.push(stack.pop());
};
colBegin++
if(colBegin> colMax-1 && rowBegin < rowMax){
colBegin = colMax-1
rowBegin++
}
};
return res
};
console.log(findDiagonalOrder(arr));代码说明
我们采取的步骤如下 -
按一个方向遍历,同时跟踪起点。
如果索引为偶数,我们将推入堆栈,并在到达对角线末端时弹出,将弹出的内容添加到我们的输出数组。
我们随着移动到下一个对角线而不断增加索引。
我们不断增加列开始索引,直到它到达末端,因为在接下来的迭代中它将停止在最后一个索引,而我们将从该点开始增加行开始索引。
输出
控制台中的输出如下 -
[ 1, 2, 4, 7, 5, 3, 6, 8, 9 ]
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP