509. 斐波那契数
题目链接:https://leetcode.cn/problems/fibonacci-number/description/
文档讲解:https://programmercarl.com/0509.%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0.html
状态:已完成
思路:dp数组长度为n+1, d p [ i ] = d p [ i − 1 ] + d p [ i − 2 ] dp[i] = dp[i-1] + dp[i-2] dp[i]=dp[i−1]+dp[i−2], d p [ 0 ] = 0 , d p [ 1 ] = 1 dp[0] = 0, dp[1] = 1 dp[0]=0,dp[1]=1
时间复杂度: O ( N ) O(N) O(N);空间复杂度: O ( N ) O(N) O(N)
class Solution {public int fib(int n) {if(n <= 1)return n;int[] dp = new int[n+1];dp[0] = 0;dp[1] = 1;for(int i=2;i<=n;i++)dp[i] = dp[i-1] + dp[i-2];return dp[n]; }
}
70. 爬楼梯
题目链接:https://leetcode.cn/problems/climbing-stairs/description/
文档讲解:https://programmercarl.com/0070.%E7%88%AC%E6%A5%BC%E6%A2%AF.html
状态:已完成
思路:dp[i]表示到达第i个台阶的方法数量
- d p [ i ] = d p [ i − 1 ] + d p [ i − 2 ] dp[i] = dp[i-1] + dp[i-2] dp[i]=dp[i−1]+dp[i−2]
- d p [ 0 ] = 1 , d p [ 1 ] = 1 dp[0] = 1, dp[1] = 1 dp[0]=1,dp[1]=1
时间复杂度: O ( N ) O(N) O(N);空间复杂度: O ( N ) O(N) O(N)
// dp[i]表示到达第i个台阶的方法数量
// dp[i] = dp[i-1] + dp[i-2]
// dp[0] = 1, dp[1] = 1class Solution {public int climbStairs(int n) {if(n == 1)return 1;int[] dp = new int[n+1];dp[0] = 1;dp[1] = 1;for(int i=2;i<=n;i++)dp[i] = dp[i-1] + dp[i-2];return dp[n];}
}
746. 使用最小花费爬楼梯
题目链接:https://leetcode.cn/problems/min-cost-climbing-stairs/description/
文档讲解:https://programmercarl.com/0746.%E4%BD%BF%E7%94%A8%E6%9C%80%E5%B0%8F%E8%8A%B1%E8%B4%B9%E7%88%AC%E6%A5%BC%E6%A2%AF.html
状态:已完成
思路:dp[i] 到达第i个台阶的最低花费
- d p [ i ] = m i n ( d p [ i − 1 ] + c o s t [ i − 1 ] , d p [ i − 2 ] + c o s t [ i − 2 ] ) dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]) dp[i]=min(dp[i−1]+cost[i−1],dp[i−2]+cost[i−2])
- d p [ 0 ] = 0 , d p [ 1 ] = 0 dp[0] = 0, dp[1] = 0 dp[0]=0,dp[1]=0
- 此处的dp[0]是第一层台阶下面一层,没有实际含义,不要纠结这点
时间复杂度: O ( N ) O(N) O(N);空间复杂度: O ( N ) O(N) O(N)
// dp[i] 到达第i个台阶的最低花费
// dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2])
// dp[0] = 0
// dp[1] = 0class Solution {public int minCostClimbingStairs(int[] cost) {int n = cost.length;if(n <= 1)return 0;int[] dp = new int[n+1];for(int i=2;i<=n;i++)dp[i] = Math.min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);return dp[n];}
}