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