第一步:找出规律
public class Solution { public int JumpFloor(int target) { if(target<=0) { return -1; }else if(target==1) { return 1; }else if(target==2) { return 2; }else { return JumpFloor(target-1)+JumpFloor(target-2); } } }上述递归代码之所以慢,是因为重复的计算太多,我们只要想办法避免重复的计算就可以。比如我们可以把已经得到的数列中间项保存起来,在下次需要计算的时候我们先排查一下,如果已经计算过就不用再重复计算了。这样的时间复杂度是O(n)。
public class Solution { public int JumpFloor(int target) { int[] result = {0, 1, 2}; if(target < 3){ return result[target]; } int one = 1; int two = 2; int results = 0; for(int i =2; i < target; i++){ results = one + two; one = two; two = results; } return results; } }