代码随想录Day41—343. 整数拆分 96.不同的二叉搜索树
343. 整数拆分
- 递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
- 遍历顺序:先来看看递归公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j)); dp[i] 是依靠 dp[i - j]的状态,所以遍历i一定是从前向后遍历,先有dp[i - j]再有dp[i]。
96.不同的二叉搜索树
- dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]
- dp[i] += dp[j - 1] * dp[i - j]; ,j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量
- 首先一定是遍历节点数,从递归公式:dp[i] += dp[j - 1] * dp[i - j]可以看出,节点数为i的状态是依靠 i之前节点数的状态。
那么遍历i里面每一个数作为头结点的状态,用j来遍历。