虽然算法很难,但不应该就放弃。这是一个学习笔记,希望你们喜欢~
先自己尝试写,大概十几分钟仍然写不出来
看思路,再尝试跟着思路写
仍然写不出来,再看视频
b站up视频推荐:爱学习的饲养员
leetcode其他文章:
数组篇:
从小白开始刷算法 数组篇 leetcode.485
从小白开始刷算法 数组篇 leetcode.283
从小白开始刷算法 数组篇 leetcode.27
链表篇:
从小白开始刷算法 ListNode 链表篇 leetcode.203
从小白开始刷算法 ListNode 链表篇 leetcode.206
队列篇
从小白开始刷算法 ListNode 链表篇 leetcode.933
栈篇
从小白开始刷算法 Stack 栈篇 leetcode.20
从小白开始刷算法 Stack 栈篇 leetcode.496
哈希篇
从小白开始刷算法 Hash 哈希篇 leetcode.217
从小白开始刷算法 Hash 哈希篇 leetcode.705
树篇
从小白开始刷算法 Tree 树篇 先序遍历 leetcode.144
从小白开始刷算法 Tree 树篇 中序遍历 leetcode.94
从小白开始刷算法 Tree 树篇 后序遍历 leetcode.94
堆篇
从小白开始刷算法 Heap 堆篇 最大堆排序 leetcode.215
小白开始刷算法 Heap 堆篇 最小堆排序 leetcode.692
双指针篇
从小白开始刷算法 对撞双指针 leetcode.881
从小白开始刷算法 快慢双指针篇 leetcode.141
二分法篇
从小白开始刷算法 二分法篇 leetcode.704
从小白开始刷算法 二分法篇 leetcode.35
从小白开始刷算法 二分法篇 leetcode.162
从小白开始刷算法 二分法篇 leetcode.74
滑动窗口篇
从小白开始刷算法 滑动窗口篇 leetcode.209
从小白开始刷算法 滑动窗口篇 leetcode.1456
递归篇
从小白开始刷算法 递归篇 leetcode.509
从小白开始刷算法 递归篇 leetcode.206
分治法篇
从小白开始刷算法 分治法篇 leetcode.169
从小白开始刷算法 分治法篇 leetcode.53
回溯法篇
从小白开始刷算法 回溯法篇 leetcode.22
从小白开始刷算法 回溯法篇 leetcode.78
dfs篇
从小白开始刷算法 dfs篇 leetcode.938
从小白开始刷算法 dfs篇 leetcode.200
bfs篇
从小白开始刷算法 bfs篇 leetcode.102
并查集篇
从小白开始刷算法 并查集篇 leetcode.200
[从小白开始刷算法 并查集篇 leetcode.547
记忆化搜索篇
从小白开始刷算法 记忆化搜索篇 leetcode.509
从小白开始刷算法 记忆化搜索篇 leetcode.322
动态规划篇
难度:简单
题目:
斐波那契数 (通常用 F(n)
表示)形成的序列称为 斐波那契数列 。该数列由 0
和 1
开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n
,请计算 F(n)
。
示例 1:
输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1
示例 2:
输入:n = 3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2
示例 3:
输入:n = 4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3
题目来源:力扣(LeetCode)
动态规划是一种解决多阶段决策问题的优化方法,通过将问题划分为多个阶段,并记忆中间结果,以避免重复计算,从而降低问题的时间复杂度。
动态规划通常适用于具有重叠子问题和最优子结构性质的问题。重叠子问题指的是在问题的求解过程中,同样的子问题会被多次重复计算,而最优子结构指的是问题的最优解可以通过子问题的最优解来推导得出。
动态规划的基本思想是将原问题拆分为若干个子问题,先求解子问题的最优解,然后利用子问题的最优解构建原问题的解。在求解过程中,使用一个表格或数组来存储子问题的解,以便在需要时进行查找和使用。
动态规划的解决步骤通常包括以下几个阶段:
动态规划算法可以显著提高问题的求解效率,特别是对于具有重叠子问题和最优子结构性质的问题。它在各种领域中有广泛的应用,例如求解最短路径、最长公共子序列、背包问题、图论等。
首先判断特殊情况,如果n小于等于1,则直接返回n,因为斐波那契数列的前两个数是0和1。
// 仅是我的思路代码,leetcode上大神更厉害 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]; } }
时间复杂度:O(N)
空间复杂度:O(N)
递归:
从小白开始刷算法 递归篇 leetcode.509
递归+记忆化搜索:
从小白开始刷算法 记忆化搜索篇 leetcode.509
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者