0、前言
本题选自leetcode
1、题目描述
2、解题思路
- 贪心的特性我们需要先了解一下
当我们应用贪婪算法解决问题的时候,每一步都可以做出一个贪婪的选择,基于这个选择,我们确定能够得到最优解!
-
绳长大于等于5的时候,我们尽可能多地剪长度为3的绳子;当剩下长度为4的时候,把绳子剪成长度为2的绳子!
-
证明:
3、代码实现
class Solution {
public:
int cuttingRope(int n) {
const int maxed = 1e9 + 7;
if (n <= 3) return n - 1;
// 尽可能剪出长度为3的绳子
int timesOf3 = n / 3;
// 当剩下的绳子长度为4的时候,不能再剪去长度为3的绳子段。
// 此时最好的做法是减去2段长度为2的绳子!
if (n - timesOf3 * 3 == 1) timesOf3 -= 1;
// 长度为2的绳子的段数
int timesOf2 = (n - timesOf3 * 3) / 2;
long long ans = 1;
for (; timesOf3; timesOf3--) {
ans = (ans * 3) % maxed;
}
for (; timesOf2; timesOf2--) {
ans = (ans * 2) % maxed;
}
return ans;
}
};
4、小节
大佬们有更好的解法吗?欢迎到评论区里留言啊!