我知道我的isPalindrome方法的工作,因爲當我在906609插上它返回true,我知道,在某些時候我Problem4方法乘以993和913一起,這將產生906609,但由於某些原因,它一直等待,直到580085返回號碼。我究竟做錯了什麼?我只是無法得到它的工作:(項目歐拉4 Java的
public static boolean isPalindrome(int number){
//checks to see if a number is a palendrome. (can't start with 0)
String numstring = Integer.toString(number);
char[] strarr = new char[String.valueOf(number).length()+1];
int x = 0;
int y = String.valueOf(number).length()-1;
for (int i=0;i<y+1;i++){
strarr[i] = numstring.charAt(i);
}
for (int a=0;a<String.valueOf(number).length()-1;a++){
if (strarr[x]!=strarr[y]){
return(false);
}
x++;
y--;
}
return(true);
}
public static int Problem4(){
int pp = 0;
for (int i=999;i>100;i--){
for (int j=999;j>100;j--){
pp = i*j;
if (isPalindrome(pp)){
return(pp);
}
}
}
return(pp);
}
我測試過isPalindrome與許多其他的數字,以確保它正常工作。爲什麼它不趕的答案嗎?我向後遍歷,所以它應該得到的最大回文第一...
解決: 我必須確保循環被允許通過在端返回,而不是和改變變量的值,以達到儘可能高的迴文a以確保它是最高的迴文。
public static int Problem4(){
int pp = 0;
int a = 0;
for (int i=100;i<1000;i++){
for (int j=100;j<1000;j++){
pp = i*j;
if (isPalindrome(pp)){
if (pp>a){
a = pp;
}
}
}
}
return(a);
}
我想你'isPalindrome()'方法過於複雜。 – BitNinja 2014-09-28 20:32:42
是的,它幾乎是巴洛克式編碼的傑作。 – 2014-09-28 20:39:19
這是'isPalindrome'的「顯而易見的」實現方式:「String s = String.valueOf(n); for(int i = 0,j = s.length() - 1; i <= j; i ++,j--)if(s.charAt(i)!= s.charAt(j))return false;返回true;' – 2014-09-28 20:44:00