#java #list
#java #Список
Вопрос:
У меня есть два списка, каждый из которых представляет число из типа long . Каждое число сохраняется в обратном порядке в каждом списке. значение: (123 сохраняется 321), и я пытаюсь найти способ найти, в каком списке наибольшее число, пройдя только один раз по каждому списку. Мне нужно сделать это рекурсивно, и я предпочитаю абстрактную идею вместо прямого ответа.
Комментарии:
1. Ваш вопрос настолько запутанный. Попробуйте это исправить. Что именно означает «список представляет длинное число»? Разве вы не имели в виду список чисел (длинный)? «Число сохраняется в обратном порядке в каждом списке» — означает, что вы вставляете число в конец списка? «Какое число больше …» означает, какой список имеет большее максимальное число?
2. да, сэр, и я отредактировал свой вопрос.
3. @yardentamam Я думаю, вы хотели сказать, что
123
это сохраняется как[3, 2, 1]
, верно? AList
цифр в обратном порядке.
Ответ №1:
Вы реализуете метод с этой подписью:
int compare(List<Integer> num1, List<Integer> num2, int index)
где num1
и num2
— ваши два списка цифр в обратном порядке, и index
является индексом в списках для сравнения.
Вы выполняете рекурсию до index
тех пор, пока не достигнете конца самого длинного списка, затем сравниваете и возвращаете значение, как это делают другие методы сравнения (<0, >0, ==0). Если списки имеют разную длину и index
находятся за пределами конца одного из списков, используйте 0
значение для пропущенной цифры этого списка.
При возврате рекурсивный вызывающий будет проверять значение и сравнивать цифры, если возвращаемое значение равно 0
, в противном случае просто верните возвращаемое значение без изменений.
Комментарии:
1. я не совсем понял это. как я могу использовать индекс и для чего именно. Я пытаюсь выяснить, как остановиться, если самая большая цифра больше, чем другая, и если нет, продолжать сравнивать. спасибо за помощь.
2. @lanz Прочитайте последний абзац. Если возвращаемое значение не
0
равно, верните его без изменений, т. Е. Прекратите сравнение. — Как бы вы отслеживали, где находятся в рекурсии, если не используете индекс?subList()
? Слишком ресурсоемкий, когда подойдет простой индекс.3. Я не могу понять, как я могу прекратить сравнивать?
4. @lanz Я уже объяснял, но, возможно, это будет сделано в третий раз: когда рекурсивный вызов возвращает ненулевое значение, верните его немедленно, т. Е. Не сравнивайте предыдущие цифры, т.Е. Прекратите сравнение после обнаружения разницы.