递归 记忆化搜索 动态规划 时间复杂度O(n)空间复杂度O(1)
描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
数据范围:1≤n≤40 1≤n≤40
要求:时间复杂度:O(n)O(n)O(n) ,空间复杂度: O(1)O(1)O(1)
示例1
输入:
2返回值:
2说明:
青蛙要跳上两级台阶有两种跳法,分别是:先跳一级,再跳一级或者直接跳两级。因此答案为2
class Solution {
public int jumpFloor(int number) {
// write code here
//斐波拉契数列
//动态规划,规划掉递归栈空间
int a = 1;//a代表f(n-2)
int b = 2;//b代表f(n-1)
int c = 0;//c代表f(n)总方法数
//fn=f(n-1)+f(n2)
if (number == 1 || number == 2) return number;
for (int i = 3; i <= number; i++) {
//动态规划
c = a + b;
a = b;
b = c;
}
return c;