Невозможно прочитать свойство 'hasOwnProperty' неопределенного хэш-карты в JavaScript - PullRequest
0 голосов
/ 07 апреля 2019

Попытка запомнить некоторые ранее вычисленные значения в хэш-карте. Я уже сделал это в другой программе, и это сработало, но по какой-то причине я получаю ошибку сейчас.

Проблема, которую я решаю: Учитывая некоторое положительное целое число n, напишите метод, который возвращает наименьшее число совершенных квадратных чисел, сумма которых равна n.

Я новичок в javascript и динамических языках в целом, поэтому я не так много могу попробовать.

Хэш-карта работает правильно в этом коде:

function numSignWays(arr, sum) {
    return findWays(arr, sum, 0, 0, {})
}

function findWays(arr, sum, p, currSum, hash) {
    const key = p - currSum;
    if(hash.hasOwnProperty(key))
        return hash[key];
    if (p < arr.length) {
        const positive = findWays(arr, sum, p + 1, currSum + arr[p], hash);
        const negative = findWays(arr, sum, p + 1, currSum - arr[p], hash);
        const totalMatches = positive + negative;
        hash[key] = totalMatches;
        return totalMatches;
    }
    if (currSum == sum)
        return 1;
    return 0;
}

console.log(numSignWays([1, 1, 1], 3));

Но я получаю сообщение об ошибке "undefined" в этом коде

function howManySquares(n) {
    return helper(n, {});
}

function helper(n, hash) {
    if (hash.hasOwnProperty(n))
        return hash[n];
    if (n <= 3)
        return n;
    res = n;
    for (let i = 2; i < n + 1; i++) {
        tmp = i * i;
        if (tmp > n) {
            break;
        } else {
            res = Math.min(res, 1 + helper(n - tmp));
        }
    }
    hash[n] = res;
    return res;
}

console.log(howManySquares(18));

Ожидаемый результат - 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...