Помогите.
package com.javarush.task.task20.task2025;
import java.util.*;
/*
Алгоритмы-числа
*/
public class Solution {
public static long[][] pows;
static {
int maxLen=String.valueOf(Long.MAX_VALUE).length()+1;
pows = new long[10][maxLen];
for(int i=0; i<10;i++)
for(int l=0;l<maxLen;l++)
if(l==0)
pows[i][l]=1;
else pows[i][l]=pows[i][l-1]*i;
}
public static long[] getNumbers(long N) {
long[] result = null;
TreeSet<Long> res= new TreeSet<>();
for(long n=0; n<N; n=nextN(n)){
for(int l=String.valueOf(n).length()-1;
l<=String.valueOf(N).length();l++){
long a = summPow(n,l);
//long x= 1113334455557789L;
//if(n==x)System.out.println(n+":"+a+"="+l);
if(l!=String.valueOf(a).length())
continue;
long b = summPow(a,l);
if(a==b){
res.add(a);
break;
}
}
}
result = new long[res.size()];
int i=0;
for(Long r:res){
result[i]=r;
i++;
}
//if(i!=0)System.out.println("Найдено:"+(res.size())+
//"\nМаксимальный разряд:"+String.valueOf(result[i-1]).length());
return result;
}
public static long summPow(long n,int length){
long summ=0;
for(long i=n; i>0; i/=10)
summ+=pows[(int)(i%10)][length];
return summ;
}
public static long nextN(long n){
if(n<10||n%10!=9)return ++n;
//System.out.print("/");
n++;
int l=0;
for(long i=n;i>0;i/=10){
if(i%10!=0){
if(l==18 && i%10==9){
//System.out.println(n);
n=Long.MAX_VALUE;
//System.out.println(n);
break;
}
String strN=i+"";
for(;l>0;l--)
strN+=i%10;
n=Long.parseLong(strN);
break;
}
l++;
}
return n;
}
public static void main(String[] args) {
long a = System.currentTimeMillis();
System.out.println(Arrays.toString(getNumbers(Long.MIN_VALUE)));
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(Long.MAX_VALUE)));//1000000)));
b = System.currentTimeMillis();
System.out.println("memory " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (8 * 1024));
System.out.println("time = " + (b - a) / 1000);
}
}