思路:这和第一道剪绳子的思路是一样的,只是这个绳子的长度变得大了许多,就是要考虑大数相乘分方法,但在python中是不用考虑这个问题的
class Solution:
def cuttingRope(self, n: int) -> int:
if n <= 3:
return n-1
num, mod = n // 3, n % 3
if mod == 0:
res = pow(3, num)
elif mod == 1:
res = pow(3, num-1) * 4
else:
res = pow(3, num) * 2
return int(res) % 1000000007
记录一下中间遇到的bug
一开始我在求3的幂次方的时候,用的是math.pow
,一直没办法ac,后面看别人的解答才知道python的math.pow
用的是浮点数求幂,复杂度为O(1),但是丢失了精确度,导致数变得很大的时候,值就不太准了,pow用的是平方求幂,如果是pow(a,b)
复杂度为O(logb),,无论a,b有多大都能够给出准确的值,具体的实现我没有看,有机会的再仔细看一下吧
欢迎大家在评论区交流和讨论~