随机给定一个n*n的二维数组,要求将它以顺时针螺旋的方式储存到新的数组中
array = [[1,2,3],
[8,9,4],
[7,6,5]]
snail(array) #=> [1,2,3,4,5,6,7,8,9]
思路:一开始没想到es6的方法,自己多试了几个编的去找规律,按四个方向去看,发现第一次肯定是先把array[0]取走,其他方向也是最外层依次取走,干脆设置4个数值表示剩下可以选取的范围,分别是:
var xBegin = 0;
var xEnd = (arrays.length - 1);
var yBegin = 0;
var yEnd = (arrays.length - 1);
然后用while循环直到可取范围是0就可以了
snail = function(arrays) {
if (arrays[0][0]) {
var xBegin = 0;
var xEnd = (arrays.length - 1);
var yBegin = 0;
var yEnd = (arrays.length - 1);
var x = [];
while (true) {
for (let i = xBegin; i <= xEnd; i++) {
x.push(arrays[yBegin][i]);
}
yBegin++;
for (let i = yBegin; i <= yEnd; i++) {
x.push(arrays[i][xEnd]);
}
xEnd--;
for (let i = xEnd; i >= xBegin; i--) {
x.push(arrays[yEnd][i]);
}
yEnd--;
for (let i = yEnd; i >= yBegin; i--) {
x.push(arrays[i][xBegin]);
}
xBegin++;
if (xBegin > xEnd) {
break;
}
}
return x
} else {
var x = []
return x
}
}
在参考其他人答案发现如果使用新方法就很简单了,用shift,pop,reverse就可以
function snail2(array) {
var vector = [];
while (array.length) {
vector.push(...array.shift());
array.map(row => vector.push(row.pop()));
array.reverse().map(row => row.reverse());
}
return vector;
}