given an infinite number of quarters (25 cents), dimes (10 cents), nickels (5 cents) and pennies (1 cent), find how many ways to represent n cents.
思路:從最大面值的硬幣開始分析,然後依次看更小面值的硬幣。假設 n = 100, 所有 valid 排列組合中
num_quarters = 0 的是一類,
num_quarters = 1 的是一類,
num_quarters = 4 的是一類
num_quarters = 0 的子集中,num_dimes = 0的是一類,num_dimes = 1的是一類,。。。
按照這種思路,可以簡單的用下面的**實現:
publicint makechange(int
amount) ;
return makechange(amount, denoms, 0);
}public
int makechange(int amount, int denoms, int
index)
return
ways;
}
上面的**是正確的,但是不夠efficient,因為存在重複運算,比如一共有60 cents時,子集a和子集b是相同的,計算了兩次。為了避免這種情況,下面的**進行了優化
int makechange(intn);
int map = new
int[n+1][denoms.length];
return makechange(n, denoms, 0, map);
}int makechange(int amount, int denoms, int index, int
map)
if(index >= denoms.length - 1)
return 1;
int denomamount =denoms[index];
int ways = 0;
for(int i = 0; i * denomamount <= amount; i++)
map[amount][index] =ways;
return
ways;
}
cc150 括號問題
一 題目 implement an algorithm to print all valid properly opened and closed combinations of n pairs of parentheses.二 思路及其 實現 關係 s n s n 1 中每乙個元素與1對括號配對組...
CC150 需整理彙總
漢諾塔問題 p141 用兩個stack設計乙個佇列 p142 結合上題,佇列實現max操作,要求盡量提高效率。程式設計之美 找出二叉樹中指定節點的下乙個節點 中序後繼 假定每個節點有父指標。p154 二叉樹某兩個節點的公共祖先。p155 判斷t2是否是t1的子樹。p159 列印二叉樹節點數值總和等於...
如何做cc150演算法題
高頻題 解題思路和答案 coding前問好問題 當我看cracking這書時,把注意力更多的放在了解題上,經常是一看到題目就提筆想解決辦法,然後coding。這種做法,不論是在實際的解題過程中,還是在面試中都是不可取的,這也是導致我被拒的主要原因,我覺得。就目前我面過的而言,面試官想看的往往不是你多...