Не проходит валидацию по следующему пункту: Метод getNumbers должен возвращать массив чисел удовлетворяющих условию задачи.
Подскажите, есть ли ошибки в коде или по объёму памяти не прохожу?
Вывод следующий:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407]
memory 256
time = 0
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834]
memory 14713
time = 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 > 0) {
ArrayList<Long> mas = new ArrayList<>();
long number = 0;
for (int j = 1; j < N; j++) {
String numberstring = j + "";
int M = numberstring.length();
int numnach = 0;
for (int k = 0; k < M; k++) {
long step = 1;
long num = Long.parseLong(numberstring.substring(numnach, k+1));
for (int l = 0; l < M; l++) {
step *= num;
}
number += step;
numnach++;
}
if(j == number)
{
mas.add(number);
}
number = 0;
}
long[] result = new long[mas.size()];
for (int i = 0; i < mas.size(); i++) {
result[i] = mas.get(i);
}
return result;
}
else
return new long[0];
}
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);
}
}
//Число S состоит из M цифр, например, S=370 и M (количество цифр) = 3
//Реализовать логику метода getNumbers, который должен среди натуральных чисел меньше N (long)
//находить все числа, удовлетворяющие следующему критерию:
//число S равно сумме его цифр, возведенных в M степень.
//getNumbers должен возвращать все такие числа в порядке возрастания.
//
//Пример искомого числа:
//370 = 3*3*3 + 7*7*7 + 0*0*0
//8208 = 8*8*8*8 + 2*2*2*2 + 0*0*0*0 + 8*8*8*8
//
//На выполнение дается 10 секунд и 50 МБ памяти.
//Метод main не участвует в тестировании.
//
//
//Требования:
//1. В классе Solution должен присутствовать метод public static long[] getNumbers(long N)
//2. В методе getNumbers не должно возникать исключений, при любых входных данных.
//3. Все найденные числа должны быть строго меньше N.
//4. Метод getNumbers должен возвращать массив чисел удовлетворяющих условию задачи.