Всем привет. Прошу помочь. код ниже
public class Solution {
    public static long[] getNumbers(long N) {
        if(N>0)
        {
        long[][] multArray = new long[10][10];                 // Создаем и заполняем массив числами в нужной степени
        for (int i = 0; i < multArray.length; i++) {           // получаем матрицу степеней
            for (int j = 1; j < multArray[i].length; j++) {    //
                multArray[i][j] = (long) Math.pow(i, j);       //
            }
        }
        long[] result = null;
        List<Integer> list = new ArrayList<>();
        for (int n = 0; n <= N; n++) {
            if (n >= 0 && n < 10) {        // все числа от 1 до 10 сразу пишем в лист
              if(n!=0)  list.add(n);        //
            } else{                         //
            long sum = 0, tempvar;
            int number;
            tempvar = n;
            int length = (int) (Math.log10(n) + 1);    // считаем длину цифры, она же будет степенью числа
            while (tempvar != 0) {
                for (int i = 0; i < length; i++) {
                    number = (int)tempvar % 10;             // получаем первую цифру числа
                    sum = sum + multArray[number][length]; // возводим ее в степень (берем значение из матрицы степеней)
                    tempvar = tempvar / 10;
                }
            }
            if (n == sum) {     //если число Армстронга => в лист
                list.add(n);
            }
        }
    }
        result = new long[list.size()];       // list  в массив
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }
        System.out.println(Arrays.toString(result));
        return result;}
        else return null;                    // если входное число отрицательное

    }

    public static void main(String[] args) {
        // проверка
        long start = (new Date()).getTime();
        long[] result = getNumbers(100000000);
        long end = (new Date()).getTime();;
        System.out.println("Time  = " + (end - start));
        // результат
        //[1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834, 1741725, 4210818, 9800817, 9926315, 24678050, 24678051, 88593477]
        //Time  = 5429

    }
}
Валя ругается по следующему пункту "Проверь, что в методе getNumbers не возникает исключения, при любых входных данных." Мне что проверять то? значение N или то, что N является числом? И Второй вопрос. Решение у меня самое простое, поэтому долгое. в 10сек естественно никак. Как оптимизировать? Прочел все что можно, все пишут про уменьшение количества чисел благодаря этому: "Сам же перебор осуществляется довольно просто : рассматриваются все числа, у которых любая цифра не меньше предыдущей и не больше последующей. Например: 12, 1557, 333 и т.д." но сюда не подходят половина чисел Армстронга (371, 407, 1634, 8208, 9474, 54748....). Может я смысл не понял, просьба тогда пояснить.