Java 时间限制超出spoj下一回文中的错误

Java 时间限制超出spoj下一回文中的错误,java,time,Java,Time,我正在尝试解决SPOJ中的下一个回文问题。我在下面的Java代码中遇到超过时间限制的错误 如果从左到右和从右到左读取时,正整数在十进制中的表示形式相同,则称为回文。对于给定的不超过1000000位的正整数K,将大于K的最小回文值写入输出。数字总是显示为无前导零 import java.math.biginger; 导入java.util.Scanner; 下一届罗马公共课{ 公共静态void main(字符串[]args){ //TODO自动生成的方法存根 扫描仪输入=新扫描仪(系统输入); i

我正在尝试解决SPOJ中的下一个回文问题。我在下面的Java代码中遇到超过时间限制的错误

如果从左到右和从右到左读取时,正整数在十进制中的表示形式相同,则称为回文。对于给定的不超过1000000位的正整数K,将大于K的最小回文值写入输出。数字总是显示为无前导零

import java.math.biginger;
导入java.util.Scanner;
下一届罗马公共课{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪输入=新扫描仪(系统输入);
int t=in.nextInt();
对于(int i=1;i integer.parseInt(str2))
str1=str1.concat(str1);
else if(Integer.parseInt(str2)>Integer.parseInt(str1))
{
str2=str2.concat(str2);
str1=str2;
}
else if(Integer.parseInt(str1)=Integer.parseInt(str2))
{
intx=Integer.parseInt(str1)+1;
str1=整数。toString(x);
str1=str1.concat(str1);
}
}
如果(l%2>0)
{
str1=str.substring(0,l/2);
str2=str.substring((l/2)+1,l);
str3=str.substring(l/2,(l/2)+1);
str4=新的StringBuffer(str1).reverse().toString();
BigInteger bi1=新的BigInteger(str1);
BigInteger bi2=新的BigInteger(str2);
comp=bi1。与(bi2)相比;
int mid=Integer.parseInt(str3);
如果(comp==-1)
{
mid+=1;
字符串str5=Integer.toString(mid);
str1=str1.concat(str5);
str1=str1.concat(str4);
}
否则如果(comp==1)
{
字符串str5=Integer.toString(mid);
str1=str1.concat(str5);
str1=str1.concat(str4);
}
否则如果(comp==0)
{
mid+=1;
字符串str5=Integer.toString(mid);
str1=str1.concat(str5);
str1=str1.concat(str4);
}
}
如果((l>2)和&(l%2==0))
{
str1=str.substring(0,l/2);
str2=str.substring(l/2,l);
BigInteger bi1=新的BigInteger(str1);
BigInteger bi2=新的BigInteger(str2);
BigInteger bi3=新的BigInteger(“1”);
comp=bi1。与(bi2)相比;
如果(comp==-1)
{
bi1=bi1.添加(bi3);
str1=bi1.toString();
str4=新的StringBuffer(str1).reverse().toString();
str1=str1.concat(str4);
}
else如果((comp==1)| |(comp==0))
{
str4=新的StringBuffer(str1).reverse().toString();
str1=str1.concat(str4);
}
}
系统输出打印项次(str1);
}
in.close();
}
}

<>代码> 因为你想找到比k大的最小回文,考虑这些规则和逻辑:

  • 为了使最小回文大于K,必须使用所有数字。(即1122=>1221将是答案)
  • 奇数长度数字只能有一个频率为1的数字,该数字为中心数字,其他数字必须有偶数频率(即11121=>11211为答案)。否则,无法创建回文
  • 对于偶数长度的数字,所有数字必须具有偶数频率(例如,请参见项目符号一)。否则,无法创建回文
我将从获得每个数字的频率开始,然后从那里开始

希望这有帮助。

可能希望您的问题包含[java]标记。
import java.math.BigInteger;
import java.util.Scanner;

public class Nextpalindrome {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner in =new Scanner(System.in);
        int t=in.nextInt();

        for (int i=1;i<=t;i++)
        {
            BigInteger bi = in.nextBigInteger();    
            String str=bi.toString();
            String str1=new String();
            String str2=new String();
            String str3=new String();
            String str4=new String();
            int l=str.length();
            int comp=0;
            if (l==2)
            {
                str1=str.substring(0,1);
                str2=str.substring(1,2);

                if (Integer.parseInt(str1)>Integer.parseInt(str2))
                str1=str1.concat(str1); 
                else if (Integer.parseInt(str2)>Integer.parseInt(str1))
                {
                str2=str2.concat(str2);             
                str1=str2;
                }
                else if (Integer.parseInt(str1)==Integer.parseInt(str2))
                {
                    int x=Integer.parseInt(str1)+1;
                    str1=Integer.toString(x);
                    str1=str1.concat(str1); 
                    }
            }

            if (l%2>0)
            {
                str1=str.substring(0,l/2);
                str2=str.substring((l/2)+1,l);
                str3 =str.substring(l/2,(l/2)+1);
                str4=new StringBuffer(str1).reverse().toString();
                BigInteger bi1 = new BigInteger(str1);
                BigInteger bi2 = new BigInteger(str2);

                comp= bi1.compareTo(bi2);

                int mid=Integer.parseInt(str3);
                if (comp==-1)
                {
                mid+=1;
                String str5=Integer.toString(mid);
                str1=str1.concat(str5);
                str1=str1.concat(str4);
                }
                else if (comp==1)
                {
                String str5=Integer.toString(mid);
                str1=str1.concat(str5);
                str1=str1.concat(str4);
                }
                else if (comp==0)
                {
                    mid+=1;
                String str5=Integer.toString(mid);
                str1=str1.concat(str5);
                str1=str1.concat(str4);
                }
            }
            if ((l>2)&&(l%2==0))
            {
                str1=str.substring(0,l/2);
                str2=str.substring(l/2,l);

                BigInteger bi1 = new BigInteger(str1);
                BigInteger bi2 = new BigInteger(str2);
                BigInteger bi3=new BigInteger("1");
                comp= bi1.compareTo(bi2);
                if (comp==-1)
                {
                bi1=bi1.add(bi3);
                str1=bi1.toString();
                str4=new StringBuffer(str1).reverse().toString();
                str1=str1.concat(str4);
                }
                else if ((comp==1)||(comp==0))
                {
               str4=new StringBuffer(str1).reverse().toString();
                str1=str1.concat(str4);
                }
            }



        System.out.println(str1);

        }

        in.close();     

    }

}