首先就是你完全可以生成一个vector <int> dp(n+1) 这种 多一个元素的 这样你就能和下标对应了 即使浪费了一点点的空间
class Solution {
public:
int integerBreak(int n) {
vector <int> dp (n+1);
dp[2]=1;
for(int i=3;i<=n;i++){
for(int j=1;j<=i/2;j++){
dp[i]=max(dp[i],max((i-j)*j,dp[i-j]*j));
}
}
return dp[n];
}
};
另外就是这个j要小于等于n/2 因为如果是偶数的话 要拆分成一半
你做树的题 还是要左子树和右子树分开来看!!!
class Solution {
public:
int numTrees(int n) {
vector <int> dp(n+1);
dp[0]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
dp[i]+=dp[j-1]*dp[i-j];
}
}
return dp[n];
}
};