爬楼梯

爬楼梯

CategoryDifficultyLikesDislikes
algorithmsEasy (53.23%)2083-

Tags

dynamic-programming

Companies

adobe | apple

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

**注意:**给定 n 是一个正整数。

示例 1:

1
2
3
4
5
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

1
2
3
4
5
6
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

Discussion | Solution

解法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
impl Solution {
    /// ## 解题思路
    /// * 设爬上第n级楼梯的总方法为f(n);
    /// * 则f(n-1), f(n-2)分别为爬上第n-1,n-2级台阶的方法
    /// * 爬上第n级台阶总有两种方式:
    ///     a. 从第n-1级台阶上1级;
    ///     b. 从第n-2机台阶上2级;
    /// 由此,f(n) = f(n-1) + f(n-2)
    pub fn climb_stairs(n: i32) -> i32 {
        match n {
            1|2 => n,
            _ => {
                let (mut prev, mut current) = (1, 2);
                for _ in 3..n+1  {
                    let old_curr = current;
                    current = prev+current;
                    prev = old_curr;
                }

                current
            }
        }
    }
}
updatedupdated2024-08-252024-08-25