题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
题解
方法一:递归
由于它可以跳1级台阶或者2级台阶,所以它上一步必定在第n-1,或者第n-2级台阶,也就是说它跳上n级台阶的跳法数是跳上n-1和跳上n-2级台阶的跳法数之和。
列出台阶数为0、1、2返回数是为了下面递归的实现。
C#:
class Solution
{
public int jumpFloor(int number)
{
if(number == 0|| number ==1)
{
return 1;
}
if(number == 2)
{
return 2;
}
return jumpFloor(number -1)+ jumpFloor(number-2);
}
}
- 优点,代码简单好写,
- 缺点:慢,会超时
- 时间复杂度:O(2^n)
- 空间复杂度:递归栈的空间
方法二:自底向上型循环求解
C#:
class Solution
{
public int jumpFloor(int number)
{
int[] floor = new int[number + 1]; //number+1,是因为number是数组的下标。
floor[0] = 1; //跳上0层台阶有1种跳法
floor[1] = 1; //跳上1层台阶有1种跳法
for (int i = 2; i <= number; i++)
{
floor[i] = floor[i - 2] + floor[i - 1]; // i级台阶的跳法数是跳上i-1和跳上i-2级台阶的跳法数之和
}
return floor[number];
}
}
- 时间复杂度:O(n)
- 空间复杂度:O(1)