Хотя вы, вероятно, абсолютно никогда не будете использовать что-то подобное в своей работе, потому что это вообще не имеет смысла, это упражнение очень распространено для домашней работы молодых программистов. Идея проста, но способ достичь не так много, у вас будет массив, который имеет несколько массивов внутри с квадратной или прямоугольной формой в грубом смысле слова, и задача состоит в том, чтобы создать функцию, которая возвращает массив с одним предметы, которые следуют за порядком спиральной формы или также хорошо известны как улитки, например, анализируют следующие примеры и ожидаемые результаты:
// Example 1.
var matrix1 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
// Expected = [1, 2, 3, 6, 9, 8, 7, 4, 5]
console.log(some_function(matrix1));
// Example 2.
var matrix2 = [
[1, 2 , 3, 4, 5 ],
[6, 7 , 8 , 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]
]
// Expected = [1, 2, 3, 4, 5, 10, 15, 20, 19, 18, 17, 16, 11, 6, 7, 8, 9, 14, 13, 12]
console.log(some_function(matrix2));
Если вы все еще не получили его, посмотрите графическое объяснение на изображении этой статьи, где вы можете увидеть стрелку, следующую за структурированным массивом в форме улитки.
Реализация
Данная структура всегда будет одним массивом с несколькими массивами внутри, так что вы можете работать с ним как с квадратичным объектом, повторяющимся по всей строке и использующим некоторые флаги для возврата к каждой строке в соответствии со статусом сгенерированного массива:
/**
* Given a matrix of m x n elements (m rows, n columns),
* return all elements of the matrix in spiral order.
* For example,
* Given the following matrix:
* [
* [ 1, 2, 3 ],
* [ 4, 5, 6 ],
* [ 7, 8, 9 ]
* ]
*
*
* It should return [1, 2, 3, 6, 9, 8, 7, 4, 5].
*/
function spiral_traversal(array) {
var result = [];
if (array.length == 0 ){
return result;
}
var max = array[0].length -1;
// Grab the first row | result.push.apply(result,array[0])
for (var i=0;i<=max;i++){
result.push(array[0][i]);
}
// Grab the last column
for (var i=1;i=0;i--){
result.push(array[max][i]);
}
// Grab the first column
for (var i=max-1;i> 0;i--){
result.push(array[i][0]);
}
subarray = [];
// Form the inner matrix
for (var i=1;i
С помощью этой функции вы сможете структурировать исходный массив с нужной формой:
var matrix1 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
// Prints: [1, 2, 3, 6, 9, 8, 7, 4, 5]
console.log(spiral_traversal(matrix1));