我写了一个简单的方法来检查数组是否是某个元素的回文。问题是,我没有从该方法中得到任何输出。一定是出了什么问题。这是代码:
public static boolean isPalindrome(int[] arr, int start) {
if (arr.length == 0) { //empty array is a palindrome
return true;
}
//loop from start to the end of array
for (int i = start; i < arr.length; i++) {
//loop from end of array to start
for (int j = arr.length - 1; j >= start; j -= 1) {
if (arr[i] != arr[j]) {
return false;
}
}
}
return true;
}
我建议这样做:
for (int i = start; i < arr.length; i++)
{
int first = arr[i];
int second = arr[length - i - 1];
if (first != second) return false;
}
return true;
它没有两个嵌套循环,而是从前面和后面检查同一个数组。
单循环就足以完成这项任务,问题是您只需要循环到将要检查的数组的一半。
public static boolean isPalindrome(int[] arr, int start)
{
if (arr.length == 0) { //empty array is a palindrome
return true;
}
//loop from start to the half of array
for (int i = start; i < arr.length - arr.length / 2; i++)
{
if (arr[i] != arr[arr.length - i - 1]) {
return false;
}
}
return true;
}
试试这个。
public static boolean isPalindrome(int[] arr, int start){
if (arr.length == 0) { //empty array is a palindrome
return true;
}
int end = arr.length - 1;
while(start <= end){
if(arr[start] != arr[end]){
return false;
}
start++;
end--;
}
return true;
}