一、343.整数拆分
1.题目描述
给定一个正整数n,将其拆分为k个正整数 的和(k>=2),并使这些整数的乘积最大化。
返回 你可以获得的最大乘积。
2.代码

3.思路
首先创建一个长度为n + 1
的数组dp
用于存储每个正整数拆分后的最大乘积,初始化dp[2]
为 1 。接着从 3 开始遍历到n
,对于每个数i
,再遍历从 1 到i - j
的数j
,考虑两种拆分情况:一是直接将i
拆分为j
和i - j
,计算它们的乘积;二是将i
拆分为j
和可继续拆分的i - j
,用j
乘以dp[i - j]
。取这两种情况的最大值,并更新dp[i]
。最终返回dp[n]
,即n
拆分后的最大乘积。
二、96.不同的二叉搜索树
1.题目描述
给你一个整数 n,求恰由 n个节点组成且节点值从 1 到 n互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
2.代码

3.思路
首先创建长度为 n + 1
的数组 dp
存储结果,初始化 dp[0]
和 dp[1]
为 1,分别代表空树和单节点树的情况。接着从 2 到 n
遍历节点数 i
,对于每个 i
,再从 1 到 i
遍历以不同节点 j
为根的情况。以 j
为根时,左子树有 j - 1
个节点,右子树有 i - j
个节点,根据乘法原理,以 j
为根的不同二叉搜索树数量是 dp[j - 1]
与 dp[i - j]
的乘积,将这些乘积累加更新 dp[i]
,最终返回 dp[n]
作为结果。