1 题目链接
2 题目要求
描述
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
示例
样例 1:
输入: n= 3
输出: 3
样例解释:
1) 1, 1, 1
2) 1, 2
3) 2, 1
共3种
样例 2:
输入: n = 1
输出: 1
解释:
只有一种方案
3 代码思路
简单的斐波那契数变形。常用三种方法:
递归法:时间复杂度较大,非常多重复性计算。
动态规划法:需要一个数组来记录,空间复杂度较大。
变量记录法:使用变量来记录,时间、空间复杂度都小。
4 代码实现
递归法
public class Solution {
public int climbStairs(int n) {
if(n <= 2)
return n;
return climbStairs(n - 1) + climbStairs(n - 2);
}
}
动态规划法
public class Solution {
public int climbStairs(int n) {
if(n == 0)
return 0;
int []dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i < n + 1; i++){
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}
变量记录法
public class Solution {
public int climbStairs(int n) {
if(n == 0)
return 0;
int num1 = 1;
int num2 = 1;
for(int i = 2; i <= n; i++){
int temp = num1 + num2;
num1 = num2;
num2 = temp;
}
return num2;
}
}