- 1、题目描述:
-3、 设计思想:
-4、视频讲解链接B站视频讲解
-5、代码:
c++版本:
class Solution { public: int jumpFloor1(int number) { if(number == 1) return 1;//只有一个台阶的时候就有一种跳法 if(number == 2) return 2;//只有2个台阶的时候就有2种跳法1)每次跳1格2)直接跳2格 //第n个台阶是不是可以从第n-1个台阶跳过来,或者第n-2格台阶跳过来,总和就是第n个台阶的总和 return jumpFloor(number-1)+jumpFloor(number-2); } int jumpFloor(int number) { if(number == 1) return 1; vector<int>dp(number + 1,1); for(int i = 2;i <= number;i ++){ dp[i] = dp[i - 1] + dp[i - 2]; } return dp[number]; } };
Java版本:
public class Solution { public int JumpFloor1(int target) { if(target == 1) return 1;//只有一个台阶的时候就有一种跳法 if(target == 2) return 2;//只有2个台阶的时候就有2种跳法1)每次跳1格2)直接跳2格 //第n个台阶是不是可以从第n-1个台阶跳过来,或者第n-2格台阶跳过来,总和就是第n个台阶的总和 return JumpFloor(target-1)+JumpFloor(target-2); } public int JumpFloor(int target){ int [] dp = new int[target + 10]; dp[0] = 1; dp[1] = 1; for(int i = 2;i <= target;i ++){ dp[i] = dp[i - 1] + dp[i-2]; } return dp[target]; } }
Python版本:
# -*- coding:utf-8 -*- class Solution: def jumpFloor1(self, number): # write code here if number == 1:return 1 #只有一个台阶的时候就有一种跳法 if number == 2: return 2#只有2个台阶的时候就有2种跳法1)每次跳1格2)直接跳2格 #第n个台阶是不是可以从第n-1个台阶跳过来,或者第n-2格台阶跳过来,总和就是第n个台阶的总和 return self.jumpFloor(number - 1) + self.jumpFloor(number - 2) #上面的递归写法超时,所以可以通过上面递归来写出dp方程式 def jumpFloor(self, number): dp = [1 for _ in range(number + 10)] for i in range(2,number + 1): dp[i] = dp[i-1] + dp[i - 2] return dp[number]