git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Given an infinite supply of:
 | 
						|
#   - quarters
 | 
						|
#   - dimes
 | 
						|
#   - nickels
 | 
						|
#   - pennies
 | 
						|
# Write a function to count the number of ways to make change of n.
 | 
						|
 | 
						|
def get(table, row, col):
 | 
						|
    """
 | 
						|
    Defensively get cell `row`, `col` from `table`.
 | 
						|
    """
 | 
						|
    if row < 0 or row >= len(table):
 | 
						|
        return 0
 | 
						|
    if col < 0 or col >= len(table[0]):
 | 
						|
        return 0
 | 
						|
    return table[row][col]
 | 
						|
 | 
						|
def print_table(table):
 | 
						|
    print('\n'.join([
 | 
						|
        ','.join([str(col) for col in table[row]])
 | 
						|
        for row in range(len(table))]))
 | 
						|
 | 
						|
def init_table(rows=0, cols=0, default=0):
 | 
						|
    result = []
 | 
						|
    for row in range(rows):
 | 
						|
        r = []
 | 
						|
        for col in range(cols):
 | 
						|
            r.append(default)
 | 
						|
        result.append(r)
 | 
						|
    return result
 | 
						|
 | 
						|
def make_change(n):
 | 
						|
    coins = [1, 5, 10, 25]
 | 
						|
    table = init_table(rows=len(coins), cols=n)
 | 
						|
 | 
						|
    for row in range(len(table)):
 | 
						|
        for col in range(len(table[row])):
 | 
						|
            curr_coin = coins[row]
 | 
						|
            curr_n = col + 1
 | 
						|
            # a
 | 
						|
            a = get(table, row - 1, col)
 | 
						|
            # b
 | 
						|
            b = get(table, row, curr_n - curr_coin - 1)
 | 
						|
            # c
 | 
						|
            c = 1 if curr_coin <= curr_n else 0
 | 
						|
            # commit
 | 
						|
            if curr_coin == curr_n:
 | 
						|
                table[row][col] = a + c
 | 
						|
            else:
 | 
						|
                table[row][col] = a + b * c
 | 
						|
            # debug
 | 
						|
            print_table(table)
 | 
						|
            print()
 | 
						|
    return table[-1][-1]
 | 
						|
 | 
						|
print(make_change(7))
 |