1.动态规划
class Solution {
public:
int cuttingRope(int n) {
vector<int> dp(n + 1);
dp[2] = 1;
for (int i = 3; i <= n; ++i)
for (int j = 1; j < i; ++j)
dp[i] = max(dp[i], max(dp[i - j] * j, (i - j) * j));
return dp[n];
}
};
2.贪心
class Solution {
public:
int cuttingRope(int n) {
assert(2 <= n && n <= 58);
if (n <= 3) return n - 1;
int res = 1;
while (n > 4) {
res *= 3;
n -= 3;
}
return res * n;
}
};
剑指 Offer 14- I. 剪绳子
最新推荐文章于 2024-10-18 10:39:20 发布
这篇博客探讨了两种不同的方法来解决剑指Offer14-I中的剪绳子问题。第一种方法使用动态规划,通过填充一个dp数组来找到最大化乘积的切割策略。第二种方法采用贪心策略,对于n大于4的情况,优先考虑3的倍数进行切割以最大化结果。这两种算法都有效地解决了问题,并展示了在不同情况下如何选择合适的算法策略。
摘要由CSDN通过智能技术生成