【劍指offer{7-10}】斐波那契數列、跳臺階、變態跳臺階、矩形覆蓋
阿新 • • 發佈:2018-12-13
斐波那契數列、跳臺階、變態跳臺階、矩形覆蓋
注:思路均是動態規劃,用中間陣列dp存放計算值,如果用遞迴耗費空間太大。
斐波那契數列
題目描述
- 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。
n<=39
C++程式碼
class Solution { public: int Fibonacci(int n) { int *dp = (int *)malloc(sizeof(int)*(n+1)); dp[0] = 0; dp[1] = 1; for(int i = 2;i<=n;i++) { dp[i] = dp[i-1]+dp[i-2]; } return dp[n]; } };
跳臺階
題目描述
- 一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
C++程式碼
class Solution { public: int jumpFloor(int number) { int *dp = (int *)malloc(sizeof(int)*(number+1)); dp[0] = 0; dp[1] = 1; dp[2] = 2; for(int i = 3;i<=number;i++) { dp[i] = dp[i-1]+dp[i-2]; } return dp[number]; } };
變態跳臺階
題目描述
- 一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
C++程式碼
class Solution {
public:
int jumpFloorII(int number)
{
if(number==0)
{
return 0;
}
else
{
return pow(2,number-1);
}
}
};
矩形覆蓋
題目描述
- 我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2
C++程式碼
class Solution {
public:
int rectCover(int number)
{
int *dp = (int *)malloc(sizeof(int)*(number+1));
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for(int i = 3;i<=number;i++)
{
dp[i] = dp[i-1]+dp[i-2];
}
return dp[number];
}
};