8.跳台阶:f(1)=1,f(2)=2,f(n) = f(n-1) + f(n-2)(n>3)
其实这个像分类加法和分步乘法:
同时延续上一题的斐波那契数列的思路:
令f(n)表示从任意位置向上跳n个台阶的跳法个数:
将第一步作为固定:
第一步跳的时候选择有两种方式:
跳1阶,那么剩下n-1阶,有f(n-1)跳法
跳2阶,那么剩下n-2阶,有f(n-2)跳法
把两种跳的方式相加即为n个台阶的跳法
public class Solution {
public int JumpFloor(int n) {
int fn1=1;
int fn2=2;
int fn=0;
if(n<=0) return 0;
if(n==1) return 1;
if(n==2) return 2;
for(int i=3;i<=n;i++){
fn=fn1+fn2;
fn1=fn2;
fn2=fn;
}
return fn;
}
}
二刷的问题:就是把问题理解透,实质就是分类加法算法。同样这道题注意使用迭代方式更好。