No.070_爬楼梯

70 爬楼梯-简单

题目:

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

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

解题思路

直接递推。c[i] = c[i-1] + c[i-2]

// date 2023/11/07
func climbStairs(n int) int {
    if n < 3 {
        return n
    }
    p1, p2 := 1, 2
    var res int
    for i := 3; i <= n; i++ {
        res = p1 + p2
        p1, p2 = p2, res
    }

    return res
}

动归的泛化写法

// 递推公式 dp[i] 表示第 i 个台阶有多少种走法
// dp[i] = dp[i-1] + dp[i-2],即两种情况
// 第一种:到达 i-1 的总解数,再走 1 步就到达 i
// 第二种:到达 i-2 的总解数,再走 2 步就到达 i
func climbStairs(n int) int {
    dp := make([]int, n+1)
    steps := []int{1, 2}
    dp[0] = 1

    for i := 1; i <= n; i++ {
        for _, step := range steps {
            if i < step {
                continue
            }
            dp[i] += dp[i-step]
        }
    }

    return dp[n]
}

最后更新于