Спустя несколько часов и порядка 9 различных способов пришел к такому решению. Естественно (кто бы мог подумать?), валидатор не принимает его. Кто знает, как нужно ублажить валидатор? Или, может я где-то ошибся?
package com.javarush.task.task20.task2025;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.LongStream;
/*
Алгоритмы-числа
*/
public class Solution {
public static long[] getNumbers(long N) {
if (!(N > 0)) throw new IllegalArgumentException("Введенное число не является натуральным");
long start = System.currentTimeMillis();
int pow = String.valueOf(N).length();
long[][] pt = new long[10][pow + 1];
for (int i = 0; i < 10; i++) {
for (int j = 0; j < pow + 1; j++) {
pt[i][j] = (long) Math.pow(i, j);
}
}
long[] res = LongStream.range(1, N).filter(x -> {
int size = String.valueOf(x).length();
long result = 0;
for (long i = x; i > 0; i /= 10) {
result += pt[(int) (i % 10)][size];
}
return x == result;
}).toArray();
System.out.println("Finish Time getNumbers7 = " + (System.currentTimeMillis() - start));
return res;
}
public static void main(String[] args) {
}
}