Придумал вот такое решение задачи, не самое оптимальное O(n^2), но все же, при проверке через IDEA получаю следующий вывод:
[153, 370, 371, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
memory 256
time = 0
[153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834, 0, 0, 0, 0, 0, 0, 0, 0, 0]
memory 2145
time = 0
//Нолики можно убрать, суть не в этом.
Вопрос, почему программа, по мнению валидатора, работает СЛИШКОМ ДОЛГО?
ПыСы: чуть обидно, так как самостоятельно выстругал данное решение, и вроде все ок, только проверку никак не пройти =\
package com.javarush.task.task20.task2025;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Solution {
public static long[] getNumbers(long N) {
long[] result = new long[20];
int count = 0;
int sum = 0;
for (int i = 0; i < N; i++) {
int length = Integer.toString(i).length();
int i2 = i;
if (i > 9) {
for (int j = 0; j < length; j++) {
int temp = i2 % 10;
sum += (int) Math.pow(temp, length);
i2 = i2 / 10;
}
if (sum == i) {
result[count++] = i;
sum = 0;
}
sum = 0;
}
}
return result;
}
public static void main(String[] args) {
long a = System.currentTimeMillis();
System.out.println(Arrays.toString(getNumbers(1000)));
long b = System.currentTimeMillis();
System.out.println("memory " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (8 * 1024));
System.out.println("time = " + (b - a) / 1000);
a = System.currentTimeMillis();
System.out.println(Arrays.toString(getNumbers(1000000)));
b = System.currentTimeMillis();
System.out.println("memory " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (8 * 1024));
System.out.println("time = " + (b - a) / 1000);
}
}
getNumbers((long) Math.pow(2, 60))
?