class Solution: def cuttingRope(self, n: int) -> int: dp = [0 for _ in range(n + 1)] # dp[0] dp[1]其实没用 dp[2] = 1 # 初始化 res = -1 for i in range(3, n + 1): for j in range(i): dp[i] = max(dp[i], max((i - j) * j, j * dp[i - j])) return dp[n]
显然dp[2]等于 1,外层循环从 3 开始遍历,一直到 n 停止。内层循环 j 从 1 开始遍历,一直到 i 之前停止,它代表着数字 i 可以拆分成 j + (i - j)。
但 j * (i - j)不一定是最大乘积,因为i-j不一定大于dp[i - j](数字i-j拆分成整数之和的最大乘积),这里要选择最大的值作为 dp[i] 的结果。