剑指 Offer 14- I. 剪绳子

题目描述

在这里插入图片描述

思路分析

采用贪心的思路,
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)

猜你喜欢

转载自blog.csdn.net/ifwecande/article/details/107816062