В StackOverflow я нашел множество решений проблемы 4 в проекте Euler. Мой вопрос не в том, чтобы снова задать решение проблемы 4 из проекта Euler, который уже реализован в StackOverflow. Вместо этого я нашел улучшенное решение Улучшенное решение от ROMANIA_engineer. У меня два вопроса против улучшенного решения. В любом случае я опубликовал решение ниже, чтобы люди могли его изучить.
public static void main(String[] args) {
int max = -1;
for ( int i = 999 ; i >= 100 ; i--) {
if ( max >= i*999 ) {
break;
}
for (int j = 999 ; j >= i ; j-- ) {
int p = i * j;
if ( max < p && isPalindrome(p) ) {
max = p;
}
}
}
System.out.println(max > -1? max : "No palindrome found");
}
Вопросов
- Почему стоит условие (max> = i * 999)?. Чего мы добьемся, включив такую недорогую операцию?
Из приведенного ниже фрагмента
for (int j = 999 ; j >= i ; j-- ) {
int p = i * j;
if ( max < p && isPalindrome(p) ) {
max = p;
}
}
- Вместо
j >= 100
даетсяj >= i
. Я вижу, что сэкономлено много времени, однако я хотел знать, что за этим стоит.