為啥青蛙上樓問題數學法與動態規劃法結果不一致問題
阿新 • • 發佈:2021-01-13
為啥青蛙上樓問題數學法與動態規劃法結果不一致問題
題目
一隻青蛙一次可以跳上1級臺階,也可以跳上2級臺階。求該青蛙跳上一個 n 級的臺階總共有多少種跳法。
答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。
方法一:動態規劃
class Solution:
def numWays(self, n):
a, b = 1, 1
for _ in range(n):
a, b = b, a + b
return a % 1000000007
a = Solution( )
print(a.numWays(77))
print(a.numWays(78))
輸出結果:
261180706
923369890
方法二:純數學排列組合
class Solution:
def factorial(self, n): # 階乘函式
if n == 0:
return 1
else:
a = 1
for i in range(1, n + 1):
a *= i
return a
def numWays (self, n: int) -> int:
step_2 = n // 2
ways = 0
for i in range(step_2 + 1):
total_step = n - i
ways += self.factorial(total_step) / (self.factorial(i) * self.factorial(n - 2 * i))
return ways % 1000000007
a = Solution()
print(a.numWays(77))
print(a.numWays( 78))
輸出結果:
261180706.0
923369889.0
可見 n=77時一致而n=78時不一致,是否是計算精度限制?該怎麼解決?