#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