很基础的一道题,每一步有两种选择,上一阶还是两阶,即第i阶的结果等于i-1和i-2的结果之和。 DP即可。 这里需要注意的是第i阶时的方法数十固定的,当n较大时,可能会非常多次的用到第i阶时的方法数,为了避免每次都再算一遍,我们要用一个数组来记录第i阶的方法数来减少时间消耗。
public class Solution {
public int climbStairs(int n) {
if( n == 0 )
{
return 0;
}
if( n == 1 )
{
return 1;
}
if( n == 2 )
{
return 2;
}
int[] a = new int[1000];
a[0] = 0;
a[1] = 1;
a[2] = 2;
for( int i=3;i<=n;i++ )
{
a[i] = a[i-1]+a[i-2];
}
return a[n];
}
}