Попытка запомнить некоторые ранее вычисленные значения в хэш-карте. Я уже сделал это в другой программе, и это сработало, но по какой-то причине я получаю ошибку сейчас.
Проблема, которую я решаю:
Учитывая некоторое положительное целое число 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.