温泉酒店网站建设方案,全网营销口碑整合营销,企业员工培训课程内容,good建筑设计网LeetCode 70. 爬楼梯 
题目描述 
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢#xff1f; 
注意#xff1a; 给定 n 是一个正整数。 
示例 1#xff1a; 
输入#xff1a;n  2
输出#xff1a;2
解释 
注意 给定 n 是一个正整数。 
示例 1 
输入n  2
输出2
解释有两种方法可以爬到楼顶。
1. 1 阶  1 阶
2. 2 阶示例 2 
输入n  3
输出3
解释有三种方法可以爬到楼顶。
1. 1 阶  1 阶  1 阶
2. 1 阶  2 阶
3. 2 阶  1 阶Java 实现代码 
方法迭代 
class Solution {public int climbStairs(int n) {if (n  2) {return n;}int first  1, second  2;for (int i  3; i  n; i) {int third  first  second;first  second;second  third;}return second;}
}解题思路 这个问题是斐波那契数列的一个变种。我们可以观察到要到达第 n 个台阶有两种情况 从第 n-1 个台阶走上来方法数为 climbStairs(n-1)。从第 n-2 个台阶走上来方法数为 climbStairs(n-2)。 因此到达第 n 个台阶的总方法数为 climbStairs(n-1)  climbStairs(n-2)。这就是斐波那契数列的定义。 复杂度分析 
时间复杂度O(n)因为我们需要从 1 到 n 遍历一次。空间复杂度O(1)我们只需要常数级别的空间来存储几个变量。 通过使用动态规划的思想我们可以避免重复计算从而提高效率。上面的代码实现了这一思想通过迭代而不是递归来计算爬楼梯的方法数。 注题目来源leetcode网站