文章目录 题目描述代码 & 思路1. 动态规划 O(n)、O(n)2. 动态规划 O(n)、O(1) 题目描述 DP 入门题了属于是 代码 & 思路 1. 动态规划 O(n)、O(n) dp[i]:可以到第 i 阶的方法有dp[i]种,所以dp[n]就是ans(注意dp.length = n+1)显而易见,dp[1]是1,dp[2]是2(一脚直接1阶;一脚直接2阶 or 先一阶再二阶)因此我们初始化dp[1],dp[2],然后直接由此循环得到结果即可 class Solution { int ans = 0; public int climbStairs(int n) { if(n < 2){ return 1; } // dp[i]:代表有dp[i]种方法到第n阶 int[] dp = new int[n+1]; // 走0阶和1阶需要的 // 由此,实现之后的每一个台阶都可以看成之前的台阶走两步或走一步到 dp[1] = 1; dp[2] = 2; // 初始化结束,现在开始找结果 for(int i = 3;i <= n;i++){ dp[i] = dp[i-1] + dp[i-2]; } return dp[n]; } } 2. 动态规划 O(n)、O(1) 在1的基础上改,实际上只需要维护三个变量即可。 class Solution { int ans = 0; public int climbStairs(int n) { if(n < 2){ return 1; } int first = 1; int second = 2; int res = -1; // 初始化结束,现在开始找结果 for(int i = 3;i <= n;i++){ res = first + second; first = second; second = res; } return res; } }