【题目描述】

​https://leetcode.cn/problems/climbing-stairs/?favorite=2cktkvj​


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

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


【示例】

【LeeCode】70. 爬楼梯_i++

【代码1 -- 简单】

import javax.swing.plaf.IconUIResource;
import java.util.*;

/**
* 有效的括号
*
* https://leetcode.cn/problems/valid-parentheses/?favorite=2cktkvj
*/
public class Solution {
public static void main(String[] args) {
int num = 45;
System.out.println(climbStairs(num));
}


// 方案1: 会超时 因为递归的计算量比较大
public static int climbStairs(int n) {
// 因为 n - 2 当n==2是 此时输入为0
if(n == 1 || n == 0 ){
return 1;
} else {
return climbStairs(n - 1) + climbStairs( n - 2);
}
}
}

【代码2 -- 推荐】

import javax.swing.plaf.IconUIResource;
import java.util.*;

/**
* 有效的括号
*
* https://leetcode.cn/problems/valid-parentheses/?favorite=2cktkvj
*/
public class Solution {
public static void main(String[] args) {
int num = 45;

System.out.println(climbStairs2(num));
}

// 方案2: 基于数组
private static int climbStairs2(int num) {
int[] dp = new int[num + 1]; // 因为 num+1的位置是保留最后结果的
dp[0] = 1;
dp[1] = 1;

for(int i = 2; i <= num; i++){
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[num]; // 最后一个结果保留的下标是num
}
}


​https://leetcode.cn/problems/climbing-stairs/?favorite=2cktkvj​