70. Climbing Stairs
问题
假设你每次可以爬 1 或 2 阶台阶,你有多少种不同爬法来爬 n 阶台阶?假设 n 为正。
例子:
思路
这个题目其实就是一个斐波拉契数列。假设你在第 n 阶(n > 2)台阶,你是怎么爬到这里的?一种方法就是从第 n-1 阶台阶上爬了一阶上来的;另一种方法是从第 n-2 阶台阶上爬了两阶上来的,所以爬到第 n 阶的方法种类等于爬到第 n-1 阶台阶和爬到第 n-2 阶台阶的方法种类之和。
但是,这个题不能用递归哦,遇到摩天大阶的时候可能会 Time Limit Exceeded。那我们该怎么办呢?第一个办法就是维护一个 list,其中存储每一阶台阶的爬法种类。但是,这个其实还是蛮烧内存的。假如我想想爬到第 1000 阶台阶,我得需要一个长度为 1000 的 list,我没必要记住第 100 阶的爬法种类,我只需要记住 n-1 和 n-2 阶的爬法种类就行了。所以我们可以用两个变量分别记住 n-1 和 n-2 阶的爬法种类,然后不断更新这两个变量就好了。
答案
最后更新于