/**
* 你可以想如果青蛙当前在第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;
    }
}