使用 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