Pracuję nad pytaniem do wywiadu, w którym zostałem poproszony, w którym mam napisać program do znalezienia największego palindromu z iloczynu dwóch liczb trzycyfrowych.Optymalizowanie największego palindromu z iloczynu dwóch liczb trzycyfrowych?
Oto question
wymyśliłem tej metody brute force, która rozpoczyna się od dołu.
public class LargestPalindromeQuestion {
public static void main(String[] args) {
int value = 0;
for (int i = 100; i <= 999; i++) {
for (int j = i; j <= 999; j++) {
int value1 = i * j;
if (isPalindrome(value1) && value < value1) {
value = value1;
}
}
}
System.out.println(value);
}
private static boolean isPalindrome(final int product) {
int p = product;
int reverse = 0;
while (p != 0) {
reverse *= 10;
reverse += p % 10;
p /= 10;
}
return reverse == product;
}
}
Zapytano mnie, jakie są optymalizacje, które mogę wykonać w tym programie? Wspomniałem, że możemy próbować przycinać przestrzeń poszukiwań i optymalizować krok sprawdzania każdego elementu w przestrzeni wyszukiwania, ale jestem zdezorientowany, w jaki sposób sprawiłbym, że działałoby to w powyższym rozwiązaniu?
Jakie są optymalizacje, które możemy wykonać w tym programie? W tej chwili wykonuje on 810000
kroków, aby znaleźć największy palindrom.
Jaka jest najmniejsza liczba kroków, które możemy wykonać, aby znaleźć największy palindrom w dwóch trzycyfrowych liczbach?
to może pomóc (jestem po prostu działa na ten sam problem, więc ja go jeszcze nie czytać) http://www.mathblog.dk/project-euler-problem -4/ – Paul
Zakładając, że początkowe zera nie mogą być częścią palindromu, wszelkie liczby kończące się na zero nie mogą być palindromami. Możesz więc pominąć wszystkie wartości i i j, gdzie:% 10 == 0 lub j% 10 == 0, ponieważ pomnożenie przez wartość kończącą się na 0 daje wynik kończący się na 0. – samgak