Как «открыть скобки» в массиве, состоящем из массивов с числами?

#algorithm

#алгоритм

Вопрос:

У меня есть массив, подобный:

 [10, [26, [32, [49]]]]
 

Это набор вложенных 2-элементных массивов, где первый элемент — число, а второй элемент — следующий массив. Мне нужно преобразовать его в один массив, например:

 [10, 26, 32, 49]
 

Какой алгоритм мне нужно использовать?

Любой язык или псевдокод был бы хорош.

Вот что у меня пока есть:

 function format($arr)
{
    if(is_array($arr[1])) {
        format($arr[1]);
    } else {
        // What's next?
    }
}
 

Комментарии:

1. Пройти его рекурсивно и поместить все встреченные элементы в новый массив?

2. Что вы пробовали до сих пор? Покажите нам СВОЙ код.

3. MrSmith42, я могу предоставить некоторый код, который я пробовал, но сомневаюсь, что это поможет: я понятия не имею о логике. например, ybungalobill? Я попытался и написал это function format($arr) { if(is_array($arr[1])) { format($arr[1]); } else { // Whats next? } } .

4. Комментарии уценка ужасна, извините

5. Если вы выполните поиск по фразе «как сгладить массив», вы найдете ресурсы, которые могут объяснить это намного лучше, чем мы можем в ответе здесь.

Ответ №1:

Для вышеупомянутой проблемы существует элегантное рекурсивное решение. Рассмотрим следующее: в псевдокоде / полу python
большой список, подлежащий обработке, называется L, число, которое является первым элементом, равно L[0], а вложенный список равен L[1]

 def process(L):
    if(len(L)==1)):  
          return L  // this is the innermost list, the base case, which we return as is it.
    L1=process(L[1]) //we solve the problem for the nested list
    L1.insert(L[0]) //note we must insert at 0 whichever language you're using, so a linked list or a stack might better suit your needs here
    return L1