题链接:https://leetcode-cn.com/problems/jian-sheng-zi-lcof/
题描述:
解题思路:
当绳子长度为 2 或 3 时,直接返回 n -1:
2 = 1 + 1 = 1 * 1 = 1,3 = 1 + 2 = 1 * 2 = 2。
当绳子长度大于等于4时,利用数组 dp 保存当前绳子的最大乘积,即 dp[i] 表示长度为 i 的绳子拆分的最大乘积。
代码实现:
/**
* @param {number} n
* @return {number}
*/
var cuttingRope = function(n) {
if (n < 4) {
return n - 1;
}
let dp = [];
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
for (let i = 4; i <= n; i++) {
dp[i] = 0;
for (let j = 1; j <= i / 2; j++) {
dp[i] = Math.max(dp[i], j * dp[i - j]);
}
}
return dp[n];
};
时间复杂度:O(n^2)
空间复杂度:O(n)