JSFiddle - React, Tailwind, and code Playground

TypeScript

/*
	Дан массив номинала монет (например 1, 2, 5, 10 рублей) и сумма денег.
  Необходимо вернуть минимальное количество монет имеющихся номиналов,
  сумма которых равна искомой. Если ее нельзя набрать имеющимися монетами,
  то выкинуть ошибку.
  Примеры:
  getMinimumCoins([1, 9, 10], 28) -> 3 (две монеты по 9 рублей,
  одна монета 10 рублей)
  getMinimumCoins([1, 2, 5, 10], 74) -> 9 (7 монет по 10 рублей, 2 монеты по 2   рубля)
  getMinimumCoins([10, 20, 30], 13) -> error
*/
function getMinimumCoins(coins, sum) {
	const arr = [];
  for (const coin of coins) {
  	arr[coin] = 1;
  }
  
  for (let i = 1; i <= sum; i += 1) {
  	if (arr[i]) continue;
    let min = Number.POSITIVE_INFINITY;
    
    for (let j = 1; j < i / 2; j += 1) {
    	const k = i - j;
      if (!arr[j] || !arr[k]) continue;
      min = Math.min(min, arr[j] + arr[k]);
    }
    
    if (min !== Number.POSITIVE_INFINITY) {
      arr[i] = min;
    }
  }
  
  if (arr[sum]) return arr[sum];
  throw new Error('cant compute coins!')
}

console.log(getMinimumCoins([1, 9, 10], 28));