【发布时间】:2015-09-03 13:27:54
【问题描述】:
我正在尝试提出一个采用这样的矩阵的解决方案:
[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
并返回一个以螺旋形式遍历数组的数组,因此在本例中:
[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]
我无法让这个递归解决方案工作,其中结果数组采用第一个数组,其余数组的最终元素,倒序的底部数组,然后是中间的第一个元素数组,然后在没有外部“外壳”的情况下重新构造数组,以便可以递归地调用剩下的数组,直到中心有一个元素的数组或 2x2 矩阵(我的基本情况,尽管后者可能不是必需的。 ..)
我的解决方案不起作用,如下所示。关于如何完成这项工作的任何建议?
var spiralTraversal = function(matriks){
var result = [];
var goAround = function(matrix) {
var len = matrix[0].length;
if (len === 1) {
result.concat(matrix[0]);
return result;
}
if (len === 2) {
result.concat(matrix[0]);
result.push(matrix[1][1], matrix[1][0]);
return result;
}
if (len > 2) {
// right
result.concat(matrix[0]);
// down
for (var j=1; j < matrix.length - 1; j++) {
result.push(matrix[j][matrix.length -1]);
}
// left
for (var l=matrix.length - 2; l > 0; l--) {
result.push(matrix[matrix.length - 1][l]);
}
// up
for (var k=matrix.length -2; k > 0; k--) {
result.push(matrix[k][0]);
}
}
// reset matrix for next loop
var temp = matrix.slice();
temp.shift();
temp.pop();
for (var i=0; i < temp.length - 1; i++) {
temp[i] = temp[i].slice(1,-1);
}
goAround(temp);
};
goAround(matriks);
};
【问题讨论】:
标签: javascript arrays algorithm recursion matrix