剑指 Offer 14- I. 剪绳子
题目
分析
| 绳子切分方案 | 乘积 | 结论 |
|---|---|---|
| 2=1+1 | 1×1=1 | |
| 3=1+2 | 1×2=2 | |
| 4=2+2=1+3 | 2×2=4>1×3=3 | 4 和 2 等价,且 2+2 比 1+3 更优 |
| 5=2+3=1+4 | 2×3=6>1×4=4 | |
| 6=3+3=2+2+2 | 3×3=9>2×2×2=8 | 6 应切分为 3+3,进而推出 3 比 2 更优 |
综上:选用尽量多的3,直到剩下2或者4时,用2
代码
class Solution {
public:
int cuttingRope(int n) {
if(n <= 3)
return 1 * (n - 1);
int res = 1;
if(n % 3 == 1)
res = 4, n -= 4;
else if(n % 3 == 2)
res = 2, n -= 2;
while(n)
res *= 3, n -= 3;
return res;
}
};

浙公网安备 33010602011771号