题目
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
分析
由题可以知道,爬楼梯一次可以爬1台阶或一次可以爬两台阶。我们使用枚举法可以知道,第一台阶有1种方法,爬两台阶有2两种方法,爬3台阶有3种方法,爬4台阶有5种方法...
到这一步,想必大家已经看出一点端倪了吧,从第3台阶开始,所拥有的方法都是前面两台阶之和。按照这种规律就可以发现第n阶台阶就等于(n-1)台阶的方法数加上(n-2)台阶的方法数。知道了规律那就好办了
那接下来思考的是,在求n阶的时候,前面一共要相加多少次,才能等于n阶的方法数,经过考察可以发现一共需要经过n-2次相加,才能得到n阶的方法数,上代码。
代码
public class Word {
public int res(int n) {
if (n<=2) {
return n;
}
int first = 1;//第一台阶的方法数
int second = 2;//第二台阶的方法数
for (int i = 0; i < n-2; i++) {//遍历n-2次相加
int sum = first + second;
first = second;//first向前移动一位
second = sum;//second向前移动一位
}
return second;
}
}
结语
其实看到这道题的时候,我想到了斐波那契数列,可真没想到这题和斐波那契数列如此相似,如果做过斐波那契数列的对于这题应该都没问题,没做过的,了解这题之后,建议去刷一下斐波那契数列,加深一下对动态规划的认识。