Leetcode Tencent 50 70. Climbing Stairs
描述
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或2个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定n是一个正整数。
示例 1:
1 | 输入: 2 |
示例 2:
1 | 输入: 3 |
来源:力扣(LeetCode)
链接:70. Climbing Stairs
解题思路
首先在稿纸上面罗列了一下,n从1取到5时各有多少种不同的方法:
n为1时有1一种方法n为2时有2一种方法n为3时有3一种方法n为4时有5一种方法n为5时有8一种方法
可以发现有这样的规律,f(5)=f(4)+f(3),f(4)=f(3)+f(2),f(3)=f(2)+f(1)……其实如果把n变大,根据题意,可以走1或者2步,那么走到第n阶台阶可以分别从n-1阶走1步上来,也可以从n-2阶走2步上来。则有第n阶的可行走法的状态转移方程:
于是最初想到使用递归的解法,代码如下:
1 | int climbStairs(int n) |
提交上去以后超时,那么就需要把中间过程保存下来了,可以定义一个数组来保存每一种台阶的总的可行方法。具体代码如下:
代码
1 | int climbStairs(int n) |