簡體   English   中英

蝸牛排序-卡在中間,不確定如何繼續

[英]Snail Sort - Stuck in the middle, not sure how to proceed

我被困在這個地方,無法繼續進行下去。 問題是這樣的。 給定一個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);

我不確定如何進行。 我需要知道兩件事。

  1. 我應該從這里繼續嗎?
  2. 我正在犯什么錯誤?

這是我針對此問題所做的工作。 您可以看到我們如何跟蹤最小和最大col和行值。 我不確定您在代碼中的工作方式如何,但希望能有所幫助。

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);

很抱歉這么晚。

我對這個問題的解決方案是

 arr = [ [1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16], ]; function rotate(arr) { copy = []; rows = arr.length; for(i = 0; i < rows; i++) { cols = arr[i].length; for(j = 0; j < cols; j++) { if(copy[cols - 1 - j] === undefined) copy[cols - 1 - j] = []; copy[cols - 1 - j][i] = arr[i][j]; } } return copy; } res = []; do { res = res.concat(arr.shift()); arr = rotate(arr); } while(arr.length); console.log(res); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM