Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 蜗牛排序-卡在中间,不知道如何进行_Javascript_Arrays - Fatal编程技术网

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来实现的。