方法一:动态规划
int climbStairs(int n) {int f[100] = {0};f[0] = 0;f[1] = 1;f[2] = 2;for(int i = 3;i<=n;i++)f[i] = f[i-1] + f[i-2];//可能是从i-1阶爬上第i阶,也有可能是从i-2阶 return f[n]; }
方法二:滚动数组
int climbStairs(int n){int p = 0;int q = 0;int r = 1;//从n==1开始算/*相当于数组中只有三个数,第三个数是前两个之和,然后向后滚动,得到最后一个的值*/ for(int i = 1;i<=n;i++){p = q;q = r;r = p + q;} return r; }