Не укладываюсь по времени или может еще какие ошибки есть. Выполняется 15 сек. может есть у кого-то варианты по оптимизации?
package com.javarush.task.task20.task2025;
import java.util.*;
/*
Алгоритмы-числа
*/
public class Solution {
public static long[] getNumbers(long N) {
long[] result = new long[0];
Set<Long> set = new TreeSet<Long>();
while(N > 0){
if(isNumberUnique(N)){
long powerNumbers = getPowerNumber(N);
if(isArmstrongNumber(powerNumbers)){
set.add(powerNumbers);
}
}
N--;
}
if (!set.isEmpty()){
result = new long[set.size()];
int i = 0;
for (long aLong : set) {
result[i++] = aLong;
}
}
return result;
}
public static int getCapacityNumber(long N){
int capacityNumber = 0;
while(N != 0){
N/=10;
capacityNumber++;
}
return capacityNumber;
}
private static boolean isNumberUnique(long number) {
long lastDigital = 0;
long currentDigital;
while (number > 0) {
currentDigital = number % 10;
if (lastDigital > currentDigital) {
return false;
}
lastDigital = currentDigital;
number /= 10;
}
return true;
}
public static boolean isArmstrongNumber(long N){
if(getPowerNumber(N) == N){
return true;
}
return false;
}
public static long getPowerNumber (long N){
long tempResult = 0;
int capacityNumber = getCapacityNumber(N);
int powerNumber = capacityNumber;
while (capacityNumber !=0){
tempResult+=Math.pow((N%10), powerNumber);
N/=10;
capacityNumber--;
}
return tempResult;
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
long[] result = getNumbers(999999999);
long end = System.currentTimeMillis() - start;
long memory2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
System.out.println("Time " + end/1000 + " sec.");
System.out.println("Result = " + Arrays.toString(result));
System.out.println("Memory = " + memory2 / 1048576);
}
}