这是代码。我想提高代码的效率。
package palindrome;
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Palindrome {
static Stack<Character> ss=new Stack<Character>();
public static void main(String[] args) throws IOException {
// TODO code application logic here
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
String s[]=read.readLine().split(",");
int min=Integer.parseInt(s[0]);
int max=Integer.parseInt(s[1]);
int finResult=palindrome(min,max);
System.out.println(finResult);
}
public static int palindrome(int min,int max)
{
int result=0;
for(int i=min; i<=max; i++)
{
String bin=BigInteger.valueOf(i).toString(2);
if(check(bin))
{
result+=1;
}
}
return result;
}
public static String fillStack(String input)
{
StringBuilder inn=new StringBuilder();
for(int i=0; i<input.length(); i++)
{
char c= input.charAt(i);
if(c!=' ')
{
ss.push(c);
inn.append(c);
}
}
return inn.toString();
}
public static String buildReverse()
{
StringBuilder rev=new StringBuilder();
while(!ss.empty())
{
char ch=ss.pop();
rev.append(ch);
}
return rev.toString();
}
public static boolean check(String input)
{
if(fillStack(input).equalsIgnoreCase(buildReverse()))
return true;
else
return false;
}
}
当我使用类似(1,1000000)的输入时,需要花费大量时间来计算。所以如何限制
时间。或者我怎样才能提高此代码的效率?
谢谢。
答案 0 :(得分:2)
首先,它似乎并不想减少编译,而是运行时。其次,如果您只想检查格式化为字符串的数字是否为回文,只需反转已创建的字符串并比较反向和原始字符串。
https://stackoverflow.com/a/7569370/2055163
http://docs.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html#reverse()