Leetcode343:
問題描述:
給定一個正整數?n
?,將其拆分為?k
?個?正整數?的和(?k >= 2
?),并使這些整數的乘積最大化。
返回?你可以獲得的最大乘積?。
代碼及注釋解析:
class Solution {
public://其實就是考慮所有情況//最多拆分成n個數字,那么我們就在拆分成[2,n]個數字中找最大值int integerBreak(int n) {vector<int>ans(n+1);//初始化答案數組//k必須>=2,因此ans[0]=0;ans[1]=0;//2只能拆分2個數字,最大值為1*1=1ans[2]=1;for(int i=3;i<=n;i++){for(int j=1;j<=i-1;j++){ans[i]=max(ans[i],max((i-j)*j,ans[i-j]*j));}}return ans[n];}
};
Leetcode96:
問題描述:
給你一個整數?n
?,求恰由?n
?個節點組成且節點值從?1
?到?n
?互不相同的?二叉搜索樹?有多少種?返回滿足題意的二叉搜索樹的種數。
代碼及注釋解析:
class Solution {
public:int numTrees(int n) {vector<int>ans(n+1,0);ans[0]=1;ans[1]=1;for(int i=2;i<=n;i++){for(int j=1;j<=i;j++){ans[i]+=ans[j-1]*ans[i-j];}}return ans[n];}
};