您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

查找数字字符串下一个回文的更好算法

查找数字字符串下一个回文的更好算法

这似乎是很多代码。您是否尝试过一种非常幼稚的方法?检查某物是否是回文实际上很简单。

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

这似乎与您描述的算法有点类似,但它从内部数字开始,然后移到外部数字。

其他 2022/1/1 18:15:21 有481人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶