나는 아래 도전을 시도하고있다. https://www.hackerrank.com/contests/projecteuler/challenges/euler145/submissions/code/25262675어떻게이 코드를보다 효율적으로 만들 수 있습니까? 자바 알고리즘
기본적으로 코드는 약 1에서 9 자리까지 다양한 길이의 숫자를 뒤집어서이 숫자를 더하고 결과가 홀수로 구성되어 있는지 확인합니다. 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