描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
示例1
输入:
2
返回值:
2
示例2
输入:
7
返回值:
21
递归:
class Solution { public: int jumpFloor(int number) { if (number < 2) return 1; // 递归终止条件 return jumpFloor(number-1) + jumpFloor(number - 2); // 递归实现 } };
动态规划:
class Solution { public: int jumpFloor(int number) { if (number < 2) return 1; // 初始条件 else { vector<int> dp(number+1, 1); // 初始条件 for (int i = 2; i <= number; ++i) { dp[i] = dp[i-1] + dp[i-2]; // 动态规划 } return dp[number]; } } };
空间优化:
class Solution { public: int jumpFloor(int number) { if (number < 2) return 1; // 初始条件 else { int dp1 = 1, dp2 = 1, dp; // 初始条件 for (int i = 2; i <= number; ++i) { dp = dp1 + dp2; // 动态规划 dp2 = dp1; dp1 = dp; } return dp; } } };