问题描述:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
样例输入:
思路分析:
(1)暴力递归 利用关系f(n)=f(n-1)+f(n-2)暴力解决。
(2)有递推式和重叠子结构问题,自然就想到了动态规划,这里就涉及到三个值,故可以使用滚动数组来节约空间。
代码见下:
public class Plt {
//爬楼梯
public int climbStairs(int n) {
//递归解法
//if(n==1||n==0) return 1;
// if(n==2) return 2;
// return climbStairs(n-1)+climbStairs(n-2);
//滚动数组
int []a=new int[3];
a[0]=1;
a[1]=1;
if(n-2<0)
return a[n];
else
{
n=n-2;
while(n>=0)
{
a[2]=a[0]+a[1];
a[0]=a[1];
a[1]=a[2];
n--;
}
}
return a[2];
}
}