题目地址:https://leetcode-cn.com/problems/climbing-stairs/
题目:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:
给定 n 是一个正整数。
示例:
解法一(动态规划)
分析:
1种 1 层 1
2种 2 层 11 2
3种 (2+1) 3 层 111 12 21
5种 (3+2) 4 层 1111 112 121 211 22
8种 (5+3) 5 层 11111 1112 1121 1211 122 2111 212 221
不是那么容易的可以得出第n层的计算公式:
f(n) = f(n-1) + f(n-2) 【斐波那契数列】
所以可以通过递归的方式计算出前面的值,又因为该题计算第n层的时候只需要关注n-1 和 n-2 层的值,所以只需要有三个变量即可完成统计。
public static int climbStairs(int n) {
// 如下三个参数分别为 n-2 n-1 n 层的种类数
// 由于第一层只有一种方式(即step_n = 1),并且 f(n) = f(n-2) + f(n-1),所以 step_n_2 和 step_n_1 的初始值为0
int step_n_2 =