LeetCode 70. 爬楼梯

148 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

70. 爬楼梯 - 力扣(LeetCode) (leetcode-cn.com)

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

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

 

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 45

二、思路分析:

这是一个斐波那契数列。先来分析一波:

  1. 假如爬楼梯的最后一步是走了1步,那么可能的情况是前n-1个台阶的排列组合。
  2. 假如爬楼梯的最后一步是走了2步,那么可能的情况是前n-2个台阶的排列组合。 由此,得出n个台阶的情况是x(n) = x(n-1) + x(n-2)。

可以看到这是一个递推数列,最后一层递推是x(3) = x(2) + x(1) = 2 + 1 = 3

由于公式到了n-2那一层,则n>=2,所以写代码时将n=1的情况拎出来单独返回,x(2) = x(1) + x(0) = 1 + 1 = 2就好了

三、AC 代码:

public int climbStairs(int n) {
       if(n == 1) return 1;
       if(n == 2) return 2;
       return climbStairs(n - 1) + climbStairs(n - 2);
    }

四、总结:

初次接触动态规划,还是需要多比划比划。

范文参考:

画解算法:70. 爬楼梯 - 爬楼梯 - 力扣(LeetCode) (leetcode-cn.com)