题目描述
思路分析
思维题。
思路:假设存在
n
i
>
=
5
n_i>=5
ni>=5,则
3
∗
(
n
i
−
3
)
>
n
i
3*(n_i-3)>n_i
3∗(ni−3)>ni,所以可拆,故答案必不存在
>
=
5
>=5
>=5的数,只能存在
1
,
2
,
3
,
4
1,2,3,4
1,2,3,4。拆出
1
1
1并不会让乘积变大,故只存在
2
,
3
,
4
2,3,4
2,3,4。
4
4
4可以拆成
2
+
2
2+2
2+2。故只存在
2
,
3
2,3
2,3。又因为
2
∗
2
∗
2
<
3
∗
3
2* 2* 2<3* 3
2∗2∗2<3∗3。故答案不超过两个
2
2
2。
因此如果
n
m
o
d
3
=
=
1
n\ mod\ 3==1
n mod 3==1,减去俩
2
2
2;如果
n
m
o
d
3
=
=
2
n\ mod\ 3==2
n mod 3==2,减去一个
2
2
2,之后
n
n
n必然是
3
3
3的倍数。全拆为
3
3
3即可。
代码实现
class Solution {
public:
int cutRope(int n) {
if(n<=3) return 1*(n-1);
int res=1;
if(n%3==1) res*=4,n-=4;
if(n%3==2) res*=2,n-=2;
while(n) res*=3,n-=3;
return res;
}
};