      "collapsed": false
     },
     "outputs": [],
     "source": [
     "def change_ways(n, coins):\n",
     "    arr = [1] + [0] * n\n",
     "    for coin in coins:\n",
     "        for i in range(coin, n + 1):\n",
     "            arr[i] += arr[i - coin]\n",
     "    return 0 if n == 0 else arr[n]"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
 
</s> remove     "        assert_equal(solution(1000, range(1, 101)), 15658181104580771094597751280645)\n",
 </s> add     "        assert_equal(solution(1000, range(1, 101)), \n",
    "                     15658181104580771094597751280645)\n", </s> remove     "        assert_equal(solution(1000, range(1, 101)), 15658181104580771094597751280645)\n",
 </s> add     "        assert_equal(solution(1000, range(1, 101)), \n",
    "                     15658181104580771094597751280645)\n", </s> remove   },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
 </s> add  </s> remove    "outputs": [
    {
     "name":"stdout",
     "text":[],
     "output_type": "stream"
    }
   ],
 </s> add    "outputs": [], </s> remove    "execution_count": 4,
 </s> add    "execution_count": 3,
    "def change_ways(n, coins):\n",
    "    arr = [1] + [0] * n\n",
    "    for coin in coins:\n",
    "        for i in range(coin, n + 1):\n",
    "            arr[i] += arr[i - coin]\n",
    "    return 0 if n == 0 else arr[n]"
      "collapsed": false
     },
     "outputs": [],
     "source": [
    "def change_ways(n, coins):\n",
    "    arr = [1] + [0] * n\n",
    "    for coin in coins:\n",
    "        for i in range(coin, n + 1):\n",
    "            arr[i] += arr[i - coin]\n",
    "    return 0 if n == 0 else arr[n]"
    "def change_ways(n, coins):\n",
    "    arr = [1] + [0] * n\n",
    "    for coin in coins:\n",
    "        for i in range(coin, n + 1):\n",
    "            arr[i] += arr[i - coin]\n",
    "    return 0 if n == 0 else arr[n]"
    "def change_ways(n, coins):\n",
    "    arr = [1] + [0] * n\n",
    "    for coin in coins:\n",
    "        for i in range(coin, n + 1):\n",
    "            arr[i] += arr[i - coin]\n",
    "    return 0 if n == 0 else arr[n]"
    "def change_ways(n, coins):\n",
    "    arr = [1] + [0] * n\n",
    "    for coin in coins:\n",
    "        for i in range(coin, n + 1):\n",
    "            arr[i] += arr[i - coin]\n",
    "    return 0 if n == 0 else arr[n]"
    "def change_ways(n, coins):\n",
    "    arr = [1] + [0] * n\n",
    "    for coin in coins:\n",
    "        for i in range(coin, n + 1):\n",
    "            arr[i] += arr[i - coin]\n",
    "    return 0 if n == 0 else arr[n]"
    "def change_ways(n, coins):\n",
    "    arr = [1] + [0] * n\n",
    "    for coin in coins:\n",
    "        for i in range(coin, n + 1):\n",
    "            arr[i] += arr[i - coin]\n",
    "    return 0 if n == 0 else arr[n]"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
keep keep keep keep replace replace replace replace replace replace keep keep keep keep keep
 Cleaned up cell execution numbers, minor PEP8 line break tweak. 
recursion_dynamic/coin_change_ways/coin_change_ways_solution.ipynb