Skip to content

Commit 13ee29f

Browse files
committed
Refactor memoisation to avoid repeated sub-array creation
1 parent 55157fa commit 13ee29f

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

Sprint-2/improve_with_caches/making_change/making_change.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,29 @@ def ways_to_make_change(total: int) -> int:
77

88
For instance, there are two ways to make a value of 3: with 3x 1 coins, or with 1x 1 coin and 1x 2 coin.
99
"""
10-
return ways_to_make_change_helper(total, [200, 100, 50, 20, 10, 5, 2, 1])
1110

11+
coins=[200, 100, 50, 20, 10, 5, 2, 1]
12+
all_subarrays=[]
13+
for i in range(len(coins)) :
14+
all_subarrays.append( coins[i:] )
1215

13-
def ways_to_make_change_helper(total: int, coins: List[int],cache=None) -> int:
16+
cache={}
17+
18+
return ways_to_make_change_helper(total, all_subarrays,0,cache)
19+
20+
21+
def ways_to_make_change_helper(total: int, all_subarrays: List[List[int]],subarray_id: int,cache) -> int:
1422
"""
1523
Helper function for ways_to_make_change to avoid exposing the coins parameter to callers.
1624
"""
17-
if total == 0 or len(coins) == 0:
25+
if total == 0 or subarray_id >= len(all_subarrays) :
1826
return 0
19-
if cache is None:
20-
cache={}
21-
key=(total,tuple(coins))
27+
28+
key = (total, subarray_id)
2229
if key in cache:
2330
return cache[key]
2431

32+
coins = all_subarrays[subarray_id]
2533
ways = 0
2634
for coin_index in range(len(coins)):
2735
coin = coins[coin_index]
@@ -31,8 +39,10 @@ def ways_to_make_change_helper(total: int, coins: List[int],cache=None) -> int:
3139
if total_from_coins == total:
3240
ways += 1
3341
else:
34-
intermediate = ways_to_make_change_helper(total - total_from_coins, coins=coins[coin_index+1:],cache=cache)
35-
ways += intermediate
42+
ways += ways_to_make_change_helper(total - total_from_coins, all_subarrays, subarray_id + coin_index + 1, cache)
43+
3644
count_of_coin += 1
37-
cache[key]=ways
45+
46+
cache[key]=ways
47+
3848
return ways

0 commit comments

Comments
 (0)