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