写在前面
讲一下开展动态规划专栏的原因:
1.今天每日一题自闭了 576. 出界的路径数。
2.从我第一次用LeetCode的明显体验出发:
你会看见评论区出现的各种代码解法前面有DFS+剪枝balabala等算法标签,
然后会看见一个词叫DP,一直觉得深奥,看了就觉得自己不会那种,
后来知道原来叫动态规划 Dynamic Programming
3.直接上难度相当于让我一步跨五级台阶,太难而且容易丧失热情。
我选择了LeetCode自带的学习计划,并且开始从零起步之旅~
基础解法
题目都很熟,不赘述,再不济直接去LeetCode搜一下。
第一本能敲出来的代码👇
class Solution {
public int fib(int n) {
if(n==0) return 0;
if(n==1) return 1;
return fib(n-1) + fib(n-2);
}
}
一看用时弱爆了
进阶解法
class Solution {
public int fib(int n) {
if (n < 2) {
return n;
}
int p = 0, q = 0, r = 1;
for (int i = 2; i <= n; ++i) {
p = q;
q = r;
r = p + q;
}
return r;
}
}
心得体会
-
基础解法-递归:
逻辑简单,容易想到。 -
进阶解法-动态规划:
复用了上一次的结果。
参考官方题解的动图食用。
https://leetcode-cn.com/problems/fibonacci-number/solution/fei-bo-na-qi-shu-by-leetcode-solution-o4ze/