Не проходит по четвертому уславию, хотя все числа выдает верно при любых вариантов ввода
package com.javarush.task.task20.task2025;
import com.sun.org.apache.xpath.internal.operations.Mult;
import java.util.*;
/*
Алгоритмы-числа
*/
public class Solution {
public static long[] getNumbers(long N) {
long[] result ;
if (N <= 0) {
result=new long[0];
return result;
}
//++++++++++++++++++++++++++++ заполнение массива степеней
long[][] mult = new long[10][20];
for (int i = 0; i < mult.length; i++) {
for (int j = 0; j < mult[i].length; j++) {
long tmp = i;
int degree = j;
long base = i;
while (degree-- > 1) {
tmp *= base;
}
mult[i][j] = tmp;
}
}
//-----------------------------
boolean lock1=true;
boolean lock2=true;
TreeSet<Long> ts = new TreeSet<>();
boolean repeat = true;
int ind=0;
boolean lock3=true;
int l;
long longsum;
long longsum1;
// заполнение массива девятками
int[] numbers = new int[String.valueOf(N).length()];
for(int i=0;i<String.valueOf(N).length();i++){
numbers[i]=9;
}
//---------------28.09
if(numbers.length==1){
int N1=(int)N;
result=new long[N1];
for(int i=0;i<N1;i++){
result[i]=i;
System.out.println(result[i]);
}
return result;
}
//-----------------
while (repeat) {
if (numbers[0] == 0&&lock3==true) {//01.10
//Block1----------------------- запуск итерации
if(lock1==true) {
for (int i = 0; i < numbers.length - 1; i++) {
if ((numbers[i] == 0) && (numbers[i + 1] > 0)) {
numbers[i + 1]--;
ind = i;
lock1 = false;
lock2 = false;
if (numbers[numbers.length - 1] == 0) {
repeat = false;
break;
}
break;
}
}
}else {
lock2=true;
}
//Block2--------------------------
if(lock2==true) {
for (int i = ind; i >= 0; i--) numbers[i] = numbers[ind + 1];
lock1=true;
}
}
//is armstrong++++++++++++++++ проверка является ли число числом Армстронга
ArrayList<Integer> ar= new ArrayList<>();
for (int element : numbers) {
ar.add(element);
}
/*
for(int i=0;i< ar.size();i++)System.out.print(ar.get(i)+" ");
System.out.println();
*/
while (true) {
l=ar.size();
longsum=0;
longsum1=0;
for (int i = 0; i < l; i++) {
longsum = longsum + mult[ar.get(i)][l];
}
if(longsum<0)break;
int len = String.valueOf(longsum).length();
long temp_number = longsum;
long[] a1 = new long[len];
for (int i = len - 1; i > -1; i--) {
a1[i] = temp_number % 10;
temp_number /= 10;
}
for (int i = 0; i < len; i++) {
longsum1 = longsum1 + mult[(int)a1[i]][len];
}
//помещение нуля в дерево
if(longsum1==0){
ts.add(longsum);
}
//-------------------
if(ar.get(ar.size()-1)==0)break;
if (longsum == longsum1&&longsum<N) {
ts.add(longsum);//помещение результата в дерево
}
if (ar.get(0)!=0){
break;
}
else {
ar.remove(0);
}
}
// -------------------------
if(lock3==false)lock3=true; //замок 3
if (numbers[0] > 0) {
numbers[0]--;
if(numbers[0]==0){
lock3=false;
}
}
}
result=new long[ts.size()];// помещение дерева в массив
int index=0;
for(Long element: ts){
// System.out.println(element);
result[index++]=element;
}
return result;
}
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(Long.MAX_VALUE)));
b = System.currentTimeMillis();
System.out.println("memory " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (8 * 1024));
System.out.println("time = " + (b - a) / 1000);
*/
getNumbers(9);
}
}