这似乎是很多代码。您是否尝试过一种非常幼稚的方法?检查某物是否是回文实际上很简单。
private boolean ispalindrome(int possiblepalindrome) {
String stringRepresentation = String.valueOf(possiblepalindrome);
if ( stringRepresentation.equals(stringRepresentation.reverse()) ) {
return true;
}
}
现在这可能不是性能最高的代码,但是它为您提供了一个非常简单的起点:
private int nextLargestpalindrome(int fromNumber) {
for ( int i = fromNumber + 1; ; i++ ) {
if ( ispalindrome( i ) ) {
return i;
}
}
}
现在,如果速度不够快,您可以将其用作参考实现并致力于降低算法复杂性。
实际上,应该有一个恒定时间(输入数字位数是线性的)来找到下一个最大的回文。我将给出一个算法,假设该数字的长度为偶数个数字(但可以扩展为奇数个数字)。
比较左半部分的最后一位数字和右半部分的第一位数字。 一个。如果右侧 左侧,则增加左侧并停止。(“ 22”) b。如果右侧 左侧,则停止。 C。如果右边 左边,则重复步骤3,左边第二位,右边第二位(依此类推)。
取左半部分,然后追加左半部分。那是您的下一个最大回文。(“ 2222”)
应用于更复杂的数字:
1. 1234567887654322
2. 12345678 87654322
3. 12345678 87654322
^ ^ equal
3. 12345678 87654322
^ ^ equal
3. 12345678 87654322
^ ^ equal
3. 12345678 87654322
^ ^ equal
3. 12345678 87654322
^ ^ equal
3. 12345678 87654322
^ ^ equal
3. 12345678 87654322
^ ^ equal
3. 12345678 87654322
^ ^ greater than, so increment the left
3. 12345679
4. 1234567997654321 answer
这似乎与您描述的算法有点类似,但它从内部数字开始,然后移到外部数字。