我被困在这个地方,无法继续前进。问题是这样的。给定一个 n x n 数组,返回从最外层元素到中间元素排列的数组元素,顺时针移动。
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);
我有点不确定如何继续。我需要知道两件事。
- 我应该如何继续?
- 我犯了什么错误?
最佳答案
这是我为解决这个问题所做的事情。您可以看到我如何跟踪最小和最大列值以及行值。我不确定您在代码中具体是如何做到这一点的,但希望这会有所帮助。
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);
关于javascript - 蜗牛排序 - 卡在中间,不知道如何继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41576249/