我正在嘗試下面的挑戰。 https://www.hackerrank.com/contests/projecteuler/challenges/euler145/submissions/code/25262675如何讓此代碼更高效? Java算法
基本上,代碼需要反轉大約1-19位數字的不同長度,將這些數字相加在一起,然後檢查結果是否完全由奇數組成,前導0是不允許的(例如100應該被排除)。
我已經完善的代碼可以計算出這些數字,但是在網站上有一個超時時間,我覺得它的性能不夠好。
我試過使用正則表達式,但無法得到它正確排序,它影響結果。任何指導都是最好的方式來編寫它,以便它儘可能快地運行,這將非常有用,如果它需要使用正則表達式或其他任何東西。
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
long t = scan.nextInt(); //Number of numbers to test
for (int i = 1; i <= t; i++){
long n = scan.nextLong();
calc(n); //begins calculation
}
}
public static void calc(long n)
{
long reversible = 0; //Counter
for (long i = 1; i < n; i++)
{
if (i%10 != 0) //Makes sure number does not end with a zero
{
long reverse = 0;
long j = i;
long checkOdd;
//Reverse the number
while(j != 0)
{
reverse = reverse * 10;
reverse = reverse + j%10;
j = j/10; //
}
long result = i + reverse; //Add current number and reverse
while (result != 0)
{
//Check and remove numbers to see if odd or not
checkOdd = result%10;
if (checkOdd%2 == 0){ //Even detected, move to next number
result = 0;
}
result = result/10; //Move to next digit
//Counts and ensures we do not count the same number multiple times
if (checkOdd%2 == 1 && result == 0)
{
reversible = reversible + 1;
}
}
/** REGEX TEST CODE -- fails when result is 5 digits long after testing */
/** if(Pattern.matches("\\d[^02468]", Long.toString(result)))
{
System.out.println(result);
reversible = reversible + 1;
}*/
}
}
System.out.println(reversible);
}
(有了歐拉項目,_brute force_失敗的經常會發生) – greybeard
那麼你有什麼建議,找出一個方程來計算它呢? –
這個問題看起來更適合http://codereview.stackexchange.com/ – jaco0646