由于值太大,找 max 过程中如果取余,会对后续结果有影响,所以这道题只用贪心,在每次累加时取余
尽可能拆成长度为 3 的小段 当 n 为 4 时,不拆比拆成 3+1 更好 还有可能过程中就溢出了,使用 int64 防止溢出
func cuttingRope(n int) int {
if n <= 3 {
return n-1
}
var ans int64 = 1
for n > 4 {
ans = (ans*3)%1000000007
n -= 3
}
return int(ans * int64(n)%1000000007)
}