题目
类型:动态规划
难度:简单
解题思路
方法一:动态规划
f(x)=f(x−1)+f(x−2)
意思是爬到第 x 级台阶的方案数是爬到第 x - 1级台阶的方案数和爬到第 x−2 级台阶的方案数的和。因为每次只能爬 1 级或 2 级,所以f(x) 只能从 f(x - 1) 和 f(x - 2)转移过来,而这里要统计方案总数就需要对这两项求和。
方法二:通项公式
根据 f(x)=f(x−1)+f(x−2) 可以推导公式
代码
方法一:
class Solution {
public int climbStairs(int n) {
int p = 0, q = 0, r = 1;
for (int i = 1; i <= n; ++i) {
p = q;
q = r;
r = p + q;
}
return r;
}
}
方法二:
public class Solution {
public int climbStairs(int n) {
double sqrt5 = Math.sqrt(5);
double fibn = Math.pow((1 + sqrt5) / 2, n + 1) - Math.pow((1 - sqrt5) / 2, n + 1);
return (int) Math.round(fibn / sqrt5);
}
}