1.题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
2.算法描述
1.当n=0或n=1时,只有1种跳法,只能不跳或者跳1级。
2.当n=2,3,…时,比如n=k,跳到第k级台阶的前一步可以是什么?
显然到第k级, 要么从k-1级台阶跳1级,要么从k-2级台阶跳2级。那跳到k级的跳法就等于跳到k-1级的跳法与跳到k-2级的跳法之和。
这样得到如下递推关系:
f
(
n
)
=
{
1
n
=
0
,
1
f
(
n
−
1
)
+
f
(
n
−
2
)
n
>
=
2
f(n)= \begin{cases} 1 &{n=0,1} \\f(n-1)+f(n-2) &{n>=2} \end{cases}
f(n)={1f(n−1)+f(n−2)n=0,1n>=2
在数学上叫做递推。
在算法上叫做动态规划。
以下代码均可以用递归实现,但是没有用dp效率高。
3.代码描述
3.1.Java代码
public class Solution {
public int JumpFloor(int target) {
int[] dp = new int[target+1];
dp[0] = 1;
dp[1] = 1;
for(int i=2;i<target+1;i++)
dp[i] = dp[i-1] + dp[i-2];
return dp[target];
}
}
3.2.Python代码
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
# write code here
dp = [0] * (number+1)
dp[0] = 1
dp[1] = 1
for i in range(2,number+1):
dp[i] = dp[i-1]+dp[i-2]
return dp[number]