public class Solution {

    // 第一种:递归实现
    // 出口:当台阶数为1,2时结束递归
    public int JumpFloor(int target) {
       return target <= 2? target : JumpFloor(target - 1) + JumpFloor(target - 2);
    }
    // 第二种:正向求解
    // 已知台阶数为1时有一种跳法,台阶数为2时有俩种跳法,
    // 台阶数为 3,4,5... n = (n - 1) + (n - 2)级台阶的跳法
    public int JumpFloor(int target) {
       if(target == 1 || target == 2){
           return target;
       }
       // a,b 初始值为跳1级台阶,跳2级台阶的跳法次数
       int a = 1,b = 2;
       for(int i = 3; i<=target; i++){
           // 跳当前台阶的跳法
           b = b + a;
           // 跳当前台阶上一级的跳法
           a = b - a;
       }
       return b;
    }

    public int JumpFloor(int target) {
       int a = 1,b = 1;
       for(int i = 1; i<target; i++){
           b = b + a;
           a = b - a;
       }
       return b;
   }
}