解题思路
这个题类似于斐波纳契数列那道题,有所区别的是他们的输入数n的范围是不同
- 暴力递归
- 无法通过打表来优化时间复杂度,所以我们只能用迭代思想优化
- dp[i]=dp[i-1]+dp[i-2];
- 当然我们只需要保存前两个数就可以,节省空间
Java
1、暴力
public class Solution {
public int JumpFloor(int target){
if( target<= 2 ) {
return target;
}
return JumpFloor(target-1)+JumpFloor(target-2);
}
}
2、优化版本
public class Solution {
public int JumpFloor(int target){
if( target <= 2 ) {
return target;
}
int a = 1;
int sum = 2;
for( int i = 2; i < target;i++ ) {
int tmp = a+sum;
a = sum;
sum = tmp;
}
return sum;
}
}
Python
1、暴力(这个还只是思路,暴力还是超时)
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
if number <= 2:
return number;
return self.jumpFloor(number-1) + self.jumpFloor(number - 2);
# write code here
2、优化版本
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
a=0
b=1
for i in range(number):
a,b=b,a+b
return b
# write code here
比较两个语言的运行结果,python还是相对来说更节省空间,java运行时间更少
还是那句话,优先选择更节省时间的方法,当然平时考试的话暴力是最行之有效的方法