У меня сложилось впечатление, что целые числа Python имеют произвольную точность.Но сегодня, решая проблему leetCode и несколько заявок с неправильным ответом, я наконец добавил mod
в свое решение, и оно сработало.Я не понимаю, почему это произошло, вот мой код:
import math
class Solution:
def numRollsToTarget(self, d: int, f: int, target: int) -> int:
if target>d*f or target<d:
return 0
memo = {}
return int(self.recurse(d,f,target,memo)%(math.pow(10,9) + 7))
# def recurse(self,d,f,target,memo):
def recurse(self,d,f,target,memo):
key = "%d %d"%(d,target)
if key in memo:
return memo[key]
if d*f<target or target<d:
return 0
elif d==1:
return 1
else:
ways = 0
for i in range(1,f+1):
# following line uncommented, and the next one commented, gives correct answer
#ways = (ways+self.recurse(d-1,f,target-i,memo))%(math.pow(10,9) + 7)
ways += self.recurse(d-1,f,target-i,memo)
memo[key] = ways
return memo[key]
Я предполагаю, что переполнение приводит к неверному результату, модифицируя частичный результат каждый раз, пока суммирование решает проблему.Или мне чего-то не хватает?