Coding
Now you should be ready to write the code for the coin change problem.  To represent infinity/inf, you can use a very large number for which you are sure that it is larger than any possible result.  For example, I suggest taking inf as the highest denomination/Txhighest.  If no combination is possible, then the coinChange function should return -1.  You may assume that the input array is sorted, but I would encourage you to sort the array, if necessary.  
The code should have a complexity of O(NT * T/coin[0]) as there are N(amount+1) cells in the matrix.  For each cell, a minimum is computed from a list of at the most amount/coin[0] items.  As the number of comparisons to compute the minimum won't change, even if we increase the number of unique coins, hence we can take amount/coin[0] as a constant, resulting in a time complexity of O(NT).
xxxxxxxxxxvar assert = require('assert');function coinChange(coins, amount) {  // Fill in this method  return 1;}try {  assert.equal(coinChange([2, 3, 5], 11), 3);  console.log('PASSED: ' + 'First Test: coinChange([2, 3, 5], 11)');} catch (err) {  console.log(err);}try {  assert.equal(coinChange([2, 3, 5, 7], 17), 3);  console.log('PASSED: ' + 'Second Test: coinChange([2, 3, 5, 7]');} catch (err) {  console.log(err);}try {  assert.equal(coinChange([2, 3, 7], 15), 4);  console.log('PASSED: ' + 'Third Test: coinChange([2, 3, 7], 15)');