Все проходит при тесте с Long.MAX_VALUE выводятся 50 чисел армстронга по порядку за 4 секунды и memory 9001. Валидатор не принимает по 4 пункту, подскажите пожалуйста что не так?
package com.javarush.task.task20.task2025;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Numbers {
int[] num;
int st = 1;
List<Long> listarm = new ArrayList<>();
long[][] mst;
public Numbers(int a) {
num = new int[a];
numIni(num);
matrixIni(a);
}
public long toNum(int[] a) {
long l = 0;
long b = 1;
long c = 0;
// int count = 0;
for (int i = a.length - 1; i >= 0; i--) {
if (a[i] == -1) {
c = 0;
} else {
c = a[i];
// count++;
}
l += c * b;
b = b * 10;
}
String s = "" + l;
st = s.length();
// st = count;
return l;
}
public void numIni(int[] a) {
for (int i = 0; i < a.length; i++) {
a[i] = -1;
}
}
public void matrixIni(int a){
mst = new long[10][a];
for (int i = 0; i < 10; i++) {
mst[i][0] = i;
}
for (int i = 0 ; i < 10; i++) {
for (int j = 1; j < a; j++) {
mst[i][j] = mst[i][0] * mst[i][j-1];
}
}
}
public void numPlus(long d) {
long lo = 0;
if (d > 9000000000000000000L) {
lo = 9000000000000000000L;
} else {
lo = d - 1;
}
long n = 0;
while (n < lo) {
for (int i = num.length - 1; i >= 0; ) {
if (num[i] == 9) {
num[i] = 0;
i--;
} else if (num[i] == -1) {
num[i] = 1;
break;
} else if (num[i] == 0) {
int b = i - 1;
while (num[b] == 0) {
b--;
}
num[b + 1] = num[b];
break;
} else {
num[i]++;
break;
}
}
n = toNum(num);
getArmstrong(n);
// System.out.println(n + " Kol-vo: " + st);
}
Collections.sort(listarm);
}
public void getArmstrong(long n) {
long arm = 0;
for (int i = num.length-st; i < num.length; i++) {
arm += mst[num[i]][st-1];
}
if (isArmstrong(n ,arm)) {
listarm.add(arm);
}
}
/* public void getArmstrong(long n) {
// int[] a = new int[st];
BigInteger arm = BigInteger.valueOf(0);
for (int i = num.length-st; i < num.length; i++) {
arm = arm.add(BigInteger.valueOf(num[i]).pow(st));
}
long arm1 = arm.longValue();
if (isArmstrong(n ,arm1)) {
listarm.add(arm1);
}
}
*/
public boolean isArmstrong(long n, long a) {
boolean b = false;
String s = "" + n;
String s2 = "" + a;
if(s.length()==s2.length()) {
char[] chars = s.toCharArray();
Arrays.sort(chars);
s = Arrays.toString(chars);
char[] chars2 = s2.toCharArray();
Arrays.sort(chars2);
s2 = Arrays.toString(chars2);
if (s.equals(s2)) {
b = true;
}
}
return b;
}
/* public boolean isArmstrong(long n, long a) {
boolean b = false;
String s = String.valueOf(n);
String s2 = String.valueOf(a);
int count = 0;
if(s.length()==s2.length()) {
char[] chars = s.toCharArray();
char[] chars2 = s2.toCharArray();
for (int i = 0; i < chars.length; i++) {
for (int j = 0; j < chars2.length; j++) {
if(chars[i] == chars2[j]){
count++;
chars2[j] = (char) -1;
break;
}
}
}
if (count == st) {
b = true;
}
}
return b;
}
*/
/* public boolean isArmstrong(long arm) {
boolean b = false;
int count = 0;
int[] a2 = getCifri(arm, st);
if(st == a2.length){
for (int i = num.length-st; i < num.length; i++) {
for (int j = 0; j < a2.length; j++) {
if(num[i] == a2[j]){
count++;
a2[j] = -1;
break;
}
}
}
if(count == st){
b = true;
}
}
return b;
}
public boolean isminusOne(int[] a2){
boolean b = false;
int c = a2.length;
for (int i = 0; i < a2.length; i++) {
if(a2[i] == -1){
c--;
}
}
if (c==0){
b = true;
}
return b;
}
*/
public void outArm() {
Collections.sort(listarm);
for (Long l : listarm) {
System.out.print(l + " ");
}
}
public int[] getCifri(long a, int i) {
int[] numbers = new int[i];
for (int j = 0; j < i; j++) {
numbers[j] = (int) a % 10;
a = a / 10;
}
return numbers;
}
public int countNumbers(long a){
int i = 0;
while (a!=0){
a=a/10;
i++;
}
return i;
}
}