/**
* 你可以想如果青蛙当前在第n级台阶上,那它上一步是在哪里呢?显然,由于它可以跳1级台阶或者2级台阶,
* 所以它上一步必定在第n-1,或者第n-2级台阶,也就是说它跳上n级台阶的跳法数是跳上n-1和跳上n-2级台阶的跳法数之和。
* 设跳上 n 级台阶有 f(n) 种跳法,f(n) = f(n - 1) + f(n - 2)。
*/
public class Solution {
public int jumpFloor(int target) {
//关键是理解 f(target) = f(target-1) + f(target -2);
if(target <= 1){
return 1;
}
//从2开始往上推 f(2) = f(1) + f(2)
//这里high 表示高台阶 f(target - 1) low 表示低台阶 f(target - 2)
int high = 1; // 因为从2开始 所以high 是 f(1) = 1;
int low = 1;//f(0) = 1,一个台阶都没有 那只用一种方法了 不用跳就可以完成 就这一种
int result = 0;
for(int i = 2;i<=target;i++){
result = high + low; //此时result 就是f(i)了
low = high;//往上推一步 f(i - 2) 推到f(i - 1)
high = result;//往上推一步 f(i - 1) 推到f(i) 这样下次循环就能求得f(i + 1)了 一直推到f(target)
}
return result;
}
}