Вывод правильный, элементы все есть, лишних нет.
package com.javarush.task.task20.task2025;
import java.util.ArrayList;
import java.util.Arrays;
/*
Алгоритмы-числа
*/
public class Solution {
public static long[] getNumbers(long N) {
ArrayList<Long> arr = new ArrayList<>();
long ch;
if (N < 1 || N > Long.MAX_VALUE) {
return new long[arr.size()];
}
long[][] powArr = new long[10][Long.toString(N).length()+1];
for(int a = 1; a < powArr.length; a++){
for(int i = 1; i<Long.toString(N).length()+1; i++) {
powArr[a][i] = (long) Math.pow(a, i);
}
}
for(long i = 1; i < N; i++) {
boolean isFind = true;
if (arr.contains(i)) {
continue;
}
char[] num = Long.toString(i).toCharArray();
if (num.length == 2) {
continue;
}
if (num.length == 1) {
arr.add(i);
continue;
}
long res = 0;
for (int j = 1; j < num.length - 1; j++) {
if ((Character.getNumericValue(num[j]) < Character.getNumericValue(num[j - 1]) ||
Character.getNumericValue(num[j]) > Character.getNumericValue(num[j + 1])) &&
Character.getNumericValue(num[j])!=0) {
isFind = false;
break;
}
}
if (isFind) {
res = numSum(i, powArr);
if (i == res) {
arr.add(res);
} else {
ch = numSum(res, powArr);
if(ch<N) {
if (ch == res && !(arr.contains(ch))) {
arr.add(res);
}
}
}
}
}
long[] result =new long[arr.size()];
for(int i=0; i < result.length; i++){
result[i] = arr.get(i);
}
Arrays.sort(result);
return result;
}
public static long numSum(long N, long[][] powArr){
char[] num = Long.toString(N).toCharArray();
long res = 0;
for (char aNum : num) {
res += powArr[Character.getNumericValue(aNum)][num.length];
}
return res;
}
public static void main(String[] args) {
}
}