Вроде решается быстро, но валидатор не принимает, говорит что долго. Подскажите, пожалуйста, что не так?
Результат:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407]
memory 368
time = 0
[1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834]
memory 368
time = 0
[1, 2, 3, 4, 5, 6, 7, 8, 9, 153]
memory 368
time = 0
Process finished with exit code 0
package com.javarush.task.task20.task2025;
/*
Алгоритмы-числа
*/
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public static long[] getNumbers(long N) {
if (N <= 1) return new long[0];
int S = 1;
int M = 1;
int razryad = 10;
ArrayList<Long> longList = new ArrayList<>();
while(S < N) {
if(S == razryad) {
razryad = razryad * 10;
M++;
}
int rslt = 0;
int number = 0;
int temp = S;
while(temp > 0) {
number = (temp % 10);
rslt = rslt + (int) Math.pow(number, M);
temp = temp / 10;
}
if((S < N) & (rslt == S)) {
longList.add((long)S);
} else if(S > N){
//System.out.println("Сработал брейк");
break;
}
S++;
}
long[] result = new long[longList.size()];
for(int i = 0; i < longList.size(); i++){
result[i] = longList.get(i);
}
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);
a = System.currentTimeMillis();
System.out.println(Arrays.toString(getNumbers(200)));
b = System.currentTimeMillis();
System.out.println("memory " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (8 * 1024));
System.out.println("time = " + (b - a) / 1000);
}
}