方法一:动态规划
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; }