动态规划入门(day01

开头先说说一下感想吧,正式开始养成刷leetcode的习惯大概从国庆开始吧,如今也终于破百,刷了110道题,记得刚开始的时候被各种指针折磨,也曾想过放弃,好在最终坚持下来。

基本路线 链表->二叉树->再刷了部分回溯->最近入门动态规划

刷链表是熟悉指针操作,而刷二叉树主要在于锻炼你的框架思维,从宏观把握,二叉树大多为递归题目,学习的数据结构的小白可以试着刷刷看呀,体验从痛苦到上瘾道路。刷题不易但也不要放弃贵在坚持,加油各位兄弟。

动态规划入门可以选择leetcode的一个动态规划刷题指南,也可以看英雄哥的动态规划入门

什么你居然秒懂英雄哥的夜深人静学算法动态规划入门??,不过难度也是不小哟。

动态规划入门我们需要了解基本的递推思想

比如斐波那契数列 

F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

 这个公式就是我们平时在刷动态规划题中求得状态方程F(n)的状态与n-1和n-2有关,我们只需要考虑n-1和n-2的状态即可,层层往前递推可有n递推至0;

在比如爬楼梯问题

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

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

假设我们现在要爬到n层楼梯,那么存在两种情况我们从n-1层爬一步上去,或者从n-2层爬两步上去,那么我们到达n层的走法就转变成 我们到达n-1层的走法的基础上每种走法向上走一步,加上到达n-2层的走法的基础上向上走两步,由此递推关系为

 a [ n ] = a [ n - 1 ] + a [ n - 2 ]

这就是递推思想

练练?
509. 斐波那契数

70. 爬楼梯

509题解

long fib(int n){
    if(n==0)  return 0;
    if(n==1)  return 1;
    long  a[31];
    a[0]=0,a[1]=1;
    for(int i=2;i<=30;i++) a[i]=a[i-2]+a[i-1];
    long result=a[n];
    return result;
}

70题解

int climbStairs(int n){
    int a[10001];
    a[1]=1;
    a[2]=2;
    for(int i=3;i<=n;i++){
        a[i]=a[i-1]+a[i-2];
    }
    return a[n];
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值