0

これがコードです。コードの効率を改善したいと思います。

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) のような入力を使用すると、計算に時間がかかります。どうすれば制限できますか

または、このコードの効率を改善するにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

2

まず、コンパイルを減らしたいのではなく、ランタイムを減らしたいようです。次に、文字列としてフォーマットされた数値が回文かどうかを確認したいだけの場合は、作成済みの文字列を逆にして、元の文字列と比較します。

https://stackoverflow.com/a/7569370/2055163

http://docs.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html#reverse()

于 2013-10-26T07:36:06.867 に答える