思路:f(n)为走到第n个台阶的方法数,那么f(n)=f(n-1)+f(n-2);即走到第n-1个台阶然后走一步到达终点或者走到第n-2个台阶然后走两部到达终点;
int climbStairs(int n)
{
if (n == 1)
return 1;
if (n == 2)
return 2;
// return climbStairs(n - 1) + climbStairs(n - 2); //如果用递归会超时,改位非递归的形式
int pre1 = 1, pre2 = 2, res = 0;
for (int i = 3; i <= n; i++)
{
res = pre1 + pre2;
pre1 = pre2;
pre2 = res;
}
return res;
}