Как сказал SSP в комментариях, вы должны создать ArrayList
с начальной емкостью Math.max(m.length, n.length) + 1
.Это максимальное количество цифр суммы.
int arrayCapacity = Math.max(m.length, n.length) + 1;
final List<Integer> solution = new ArrayList<>(arrayCapacity);
Затем вам нужно заполнить это 0s:
for (int i = 0 ; i < arrayCapacity ; i++) {
solution.add(0);
}
Вот «хитрость».В основном цикле for вы не заполняете массив с самого начала, вы заполняете его с конца.Вместо insertElementAt
начала, вы set
элемента с любым индексом, по которому мы итерируете, плюс 1, потому что solution
на единицу длиннее, чем m
и n
.
solution.set(Math.max(msize, nsize) + 1, csum % 10);
Это, по сути, заполнение списка «со спины».
И в конце вы изменяете размер списка следующим образом:
if (carry > 0) {
solution.set(0, carry);
return solution.toArray(new Integer[] {});
} else {
return solution.subList(1, solution.size()).toArray(new Integer[] {});
}