劍指offer10題 青蛙跳台階問題

2021-10-23 21:09:52 字數 982 閱讀 9258

乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上乙個 n 級的台階總共有多少種跳法。

答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。

示例 1:

輸入:n = 2 輸出:2 示例 2:

輸入:n = 7 輸出:21 示例 3:

0 <= n <= 100

動態規劃 值需要模1000000007.

大數相乘,大數的排列組合等為什麼要取模 1000000007是乙個質數(素數),對質數取余能最大程度避免結果衝突/重複

int32位的最大值為2147483647,所以對於int32位來說1000000007足夠大。

int64位的最大值為2^63-1,用最大值模1000000007的結果求平方,不會在int64中溢位。

所以在大數相乘問題中,因為(a∗b)%c=((a%c)∗(b%c))%c,所以相乘時兩邊都對1000000007取模,再儲存在int64裡面不會溢位。

這道題為什麼要取模,取模前後的值不就變了嗎? 確實:取模前 f(43) = 701408733, f(44) = 1134903170,

f(45) = 1836311903, 但是 f(46) > 2147483647結果就溢位了。

_____,取模後 f(43) = 701408733, f(44) = 134903163 , f(45) = 836311896, f(46) = 971215059沒有溢位。

取模之後能夠計算更多的情況,如 f(46)

這道題的測試答案與取模後的結果一致。

總結一下,這道題要模1000000007的根本原因是標準答案模了1000000007。不過大數情況下為了防止溢位,模1000000007是通用做法,原因見第一點。

class

solution

return dp[n];}

};

劍指Offer 10 青蛙跳台階問題

題目 乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上乙個 n 級的台階總共有多少種跳法。答案需要取模 1e9 7 1000000007 如計算初始結果為 1000000008,請返回 1。示例 1 輸入 n 2 輸出 2 示例 2 輸入 n 7 輸出 21 1 設跳上 n 級台階有 ...

劍指offer 青蛙跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 這是一道比較簡單的動態規劃問題。n 1時,青蛙只能跳一次,即num 1 n 2時,青蛙可以有兩種方法,1 1,2 即num 2 n 3時,青蛙可以有三種方法,1 1 1,1 2,2 1...

劍指offer 青蛙跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 public class solution if target 1 if target 2 return jumpfloor target 1 jumpfloor target 2 乙...