如何优化我编写的以下java代码以生成下一个回文数

oymdgrw7  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(278)

这个问题在这里已经有答案了

寻找数字串下一个回文的更好算法(10个答案)
5年前关门了。

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.event.AncestorEvent;

public class NextPalindrome {
    public static void main(String args[])
    {
        Scanner console = new Scanner(System.in);
        ArrayList<BigInteger> inArr = new ArrayList<BigInteger>();
        int tc = console.nextInt();
        for(int x =0 ;x<tc;x++){
            BigInteger num = console.nextBigInteger();

            num = num.add(BigInteger.valueOf(1));
            inArr.add(num);
        }
        for(int y =0 ;y<tc;y++)
        {

            while(!checkPal(inArr.get(y))){
                BigInteger temp = inArr.get(y);
                temp = inArr.get(y).add(BigInteger.valueOf(1));
                inArr.set(y, temp);
            }
            System.out.println(inArr.get(y));
        }
    }
    static boolean checkPal(BigInteger num){
        String str = num.toString();
        char[] charStr = str.toCharArray();
        //System.out.println(charStr);
        boolean isPal= true;
        int first =0;
        int last = str.length()-1;
        for(int i = 0; i<str.length();i++){
            if(charStr[first] == charStr[last])
            {
                first++;
                last--;
                continue;
            }else
            {
                isPal = false;
                break;
            }
        }
        return isPal;

    }

}

我写的这段代码对于小到中等大小的输入工作得很好,但是如果我给出一个更大的数字,比如任意一个随机的更大的数字,它表示超过了时间限制。有人能给出与此相关的输入吗。

m0rkklqb

m0rkklqb1#

回廊是指后半部分是前半部分的反映。
你所需要做的就是把数字的前半部分取出来,递增,然后把前半部分的数字倒过来。e、 说你有。

326856897845875634

上半场开始

326856897

递增(在检查是否为该数字生成回文后)

326856898

因为它是一个偶数长度的数字,所以倒转上半部分。

326856898898658623

如果是奇数长度的数字,则不需要反转中间的数字。
而不是暴力,这将需要越来越多的时间,每一个数字你添加将需要10倍长。使用的方法与位数成正比。
而且代码应该是大小的一半左右。

相关问题