Существует метод грубой силы: вы просматриваете все числа и проверяете, палиндром они или нет. Для проверки поменяйте число и сравните. Сложность должна быть O (n log10 (n)). [Не то, что log10 () имеет значение, но ради полноты. ]
Другой способ - генерировать палиндромы в соответствии с количеством цифр. Допустим, вам нужно сгенерировать 5-значные палиндромы, они имеют форму ABCBA, поэтому просто переберите 0-9 и заполните все позиции. Теперь, если вы генерируете палиндромы ниже 10 ^ 4, то генерируйте палиндромы из 1,2,3 и 4 цифр.
Я написал быстрые (и грязные) коды C ++ для проверки скорости обоих алгоритмов (8-значный палиндром).
Грубая сила: Ideone. (3,4 с)
Лучший алгоритм: Идеально. (0с)
Я удалил операторы печати, потому что Ideone не разрешает вывод таких больших данных.
На моем компьютере время:
Brute force:
real 0m7.150s
user 0m7.052s
Better algorithm:
real 0m0.024s
user 0m0.012s
Я знаю, что вы упомянули язык как Java, но я не знаю Java, и эти коды просто показывают разницу между алгоритмами, и вы можете написать свой собственный код Java.
PS: я проверил свой код для 8-значных палиндромов с грубой силой, не могу быть уверен, что он дает неправильные значения для более чем 8 цифр, хотя используемый подход является общим. Кроме того, я хотел бы дать ссылки на код в комментариях, так как правильный подход уже упоминался, но у меня нет необходимых привилегий.