题目描述
思路分析
采用贪心的思路,
1.任取长度为n的绳子,我们可以切最多n-1刀,现在考虑切的第一刀,有n-1种切法
2.那么用dp[n]表示长度为n的绳子可以产生的最大乘积
由1可知,dp[n] = max(dp[i]*dp[n-i]),i属于[1,n-1]
初始化边界是本题比较狗血的,因为i = 2,3的时候,dp的结果为1,2.但是在其他节点中,他们应该是2 3
代码展示
class Solution {
public:
int cuttingRope(int n) {
if (n < 3) {
return 1;
}else if (n == 3) {
return 2;
}
int dp[n+1];
for (int i = 0; i <= n; i++) {
dp[i] = i;
}
for (int i = 4; i <= n; i++) {
for (int j = 1; j < 4; j++) {
dp[i] = max(dp[i], dp[i-j] * dp[j]);
}
}
return dp[n];
}
};
结果分析
时间复杂度
O(N)
空间复杂度
O(N)