动态规划

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。

示例 1: >输入: 2 输出: 2

解释: 有两种方法可以爬到楼顶。

1 阶 + 1 阶 2 阶

示例 2: >输入: 3 输出: 3

解释: 有三种方法可以爬到楼顶。

1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 阶 + 1 阶

思路

使用动态规划的思路去解决问题。对于指定n阶的楼梯,最后一次爬楼梯,要嘛是1阶,要嘛就是2阶,那么总共就有爬n1n-1阶和n2n-2阶的楼梯

状态转移方程式

F(1)=1F(1) = 1
F(2)=2F(2) = 2
F(n)=F(n1)+F(n2)F(n) = F(n-1)+F(n-2)

根据状态转移方程式,我们可以很容易的得出代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

class Solution {

public int climbStairs(int n) {
if (n < 3) {
return n;
}
int f1 = 1;
int f2 = 2;
for (int i = 3; i <=n; i++) {
int t = f2;
f2 = f2 + f1;
f1 = t;
}
return f2;
}
}