Javascript 蜗牛排序-卡在中间,不知道如何进行
我被困在这个地方,在那里,我无法继续前进。问题是这样的。给定一个Javascript 蜗牛排序-卡在中间,不知道如何进行,javascript,arrays,Javascript,Arrays,我被困在这个地方,在那里,我无法继续前进。问题是这样的。给定一个nxn数组,按顺时针方向返回从最外层元素排列到中间元素的数组元素 array = [[1,2,3], [4,5,6], [7,8,9]] snail(array) #=> [1,2,3,6,9,8,7,4,5] 为了更好地理解,请按照下一个数组的编号依次进行操作: array = [[1,2,3], [8,9,4], [7,6,5]] snail(arr
nxn
数组,按顺时针方向返回从最外层元素排列到中间元素的数组元素
array = [[1,2,3],
[4,5,6],
[7,8,9]]
snail(array) #=> [1,2,3,6,9,8,7,4,5]
为了更好地理解,请按照下一个数组的编号依次进行操作:
array = [[1,2,3],
[8,9,4],
[7,6,5]]
snail(array) #=> [1,2,3,4,5,6,7,8,9]
这幅图将更清楚地说明问题:
到目前为止,我的尝试是:
arr = [[1, 2, 3], [3, 4]];
var n = arr[0].length;
var i = 0, j = 0;
var fa = [];
var count = 0;
var direction = "right";
console.log(n);
while (fa.length < n * n) {
fa.push(`${i}, ${j}`);
if (j == n - 1 && i < n - 1) {
direction = "down";
} else if (j == 0 && i != 0) {
direction = "up";
} else if (i == n - 1) {
direction = "left";
} else if (i == 0) {
direction = "right";
}
switch (direction) {
case "right":
j++;
break;
case "left":
j--;
break;
case "up":
i--;
break;
case "down":
i++;
break;
}
if (count++ == 15)
break;
}
console.log(fa);
arr=[[1,2,3],[3,4];
var n=arr[0]。长度;
var i=0,j=0;
var fa=[];
var计数=0;
var direction=“right”;
控制台日志(n);
while(fa.length
我有点不知道该怎么做。我需要知道两件事
下面是我为这个问题所做的。您可以看到我是如何跟踪最小和最大列以及行值的。我不确定您在代码中是如何做到这一点的,但希望这能有所帮助
var m = 4;
var n = 4;
var board = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
];
var result = [];
var dir = 'right';
var imin = 0;
var imax = m - 1;
var jmin = 0;
var jmax = n - 1
var i = imin;
var j = jmin;
var done = false;
while (!done)
{
switch (dir)
{
case 'right':
i = imin;
j = jmin;
for (j; j <= jmax; j++)
result.push(board[i][j]);
console.log(result);
dir = 'down';
imin++;
break;
case 'left':
i = imax;
j = jmax;
for (j; j >= jmin; j--)
result.push(board[i][j]);
console.log(result);
dir = 'up';
imax--;
break;
case 'down':
i = imin;
j = jmax;
for (i; i <= imax; i++)
result.push(board[i][j]);
console.log(result);
dir = 'left';
jmax--;
break;
case 'up':
i = imax;
j = jmin;
for (i; i >= imin; i--)
result.push(board[i][j]);
console.log(result);
dir = 'right';
jmin++;
break;
}
if (imin > imax || jmin > jmax)
done = true;
}
console.log(result);
var m=4;
var n=4;
var板=[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
];
var结果=[];
var dir='右';
var-imin=0;
var imax=m-1;
var-jmin=0;
var jmax=n-1
var i=亚胺;
var j=jmin;
var done=false;
而(!完成)
{
交换机(dir)
{
案例“正确”:
i=亚胺;
j=jmin;
对于(j;j=jmin;j--)
结果.推(板[i][j]);
控制台日志(结果);
dir='up';
imax--;
打破
案例“关闭”:
i=亚胺;
j=jmax;
对于(i;i=imin;i--)
结果.推(板[i][j]);
控制台日志(结果);
dir='右';
jmin++;
打破
}
if(imin>imax | jmin>jmax)
完成=正确;
}
控制台日志(结果);
很抱歉这么晚了
我对这个问题的解决办法是
arr=[
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
];
功能旋转(arr){
拷贝=[];
行=arr.length;
对于(i=0;i 控制台日志(res)代码>您应该显示/描述您从代码中获得的输出,这样我们就知道哪里出了问题……每次更改方向时,您都应该删除/避免刚刚完成的行/列。这将很好地递归工作。@SunilD。老板,我已经给出了我的全部代码,你还指望什么?给你的说明:@nurdyguy是的!我用一个映射来做。因此,i
和j
值在限值范围内递增和递减。我正在这样做,但不确定哪里出了问题。显示代码是关键,但它也有助于描述代码在做什么。在本例中,向我们展示正在记录到控制台的内容。或者如果你有错误,告诉我们错误是什么。这太完美了!谢谢我也做了同样的事,不是吗?我哪里做错了?据我所知,你的基本上是绕着外面转一圈。一旦你完成了一个侧面,你需要移除那个侧面,这样你就不会一直跟随它。我是通过设置imax和jmin来实现的。