leetcode刷题(83)——面试题46. 把数字翻译成字符串

对于题目的理解,其实也不难,我们并没有必要把数字真的转换成它要求的字母,只要得出有多少种分割方法就行了。

这种分割的问题也叫“隔板问题”——在数字之间的缝隙里插入隔板,看有多少种分法,是一类组合问题。这里由于受到26个字母的限制,只需要考虑分割之后,每两个“隔间”内有两个数字就可以了。也就是说,我们只需要考虑当前数字与它后面的数字的组合是不是在[10,25]内即可,这里之所以是边界是10,因为会出现01,02这种,这种不是有效的2位数,不能转化为对应的字母

这么想的话,实际上该问题已经有点像经典的“爬楼梯”问题了:一次上一阶或者两阶,总共有多少种走法。于是自然想到了用动态规划的解法,关键性的问题也就出现了:递推公式是什么?

首先我们一定能想到不复杂的情况:

只有一个数字时,不用切割,只有一种对映,dp[0] = 1;
dp[1]的值是多少实际上取决于字符串str[1]和str[0]构成的数字是不是处于[0,25]区间内——是,则dp[1] = 2;否则dp[1] = 1.
这两条是最容易想到的,不过也确实为后面的条件判断打下基础了。接下来是数学中的归纳法,通俗说是找规律。以题目中的输入示例12258来看,dp[0] = 1, dp[1] = 2

dp[2] = 3((1,22), (12,2), (1,2,2))
dp[3] = 5 ((12,25), (1,2,25), (1,22,5), (12,2,5),(1,2,2,5))
dp[4]还是5,原因是str[4] = 8与str[3] = 5组合起来大于25,不能对映到一个字符,5和8之间必须切开,所以加上的这个数字8并不影响分割方式。
好了,上面的例子写完,如果还没找到规律可以接着往后写。对于dp问题敏感的选手应该已经想到需要用上dp[i], dp[i-1]这些元素来总结递推了:

2 <= i < len(str)
if str[i]和str[i-1]构成的数字 < 26:
    dp[i] = dp[i-1] + dp[i-2]   #等于前两项之和
else:
    dp[i] = dp[i-1]             #不受影响直接等于前一项

代码

public class Solution46m {
    public int translateNum(int num) {
        String res = String.valueOf(num);
        int[] dp = new int[res.length()];
        if (res.length() < 2) {
            return res.length();
        }
        dp[0] = 1;
        int firstSum = Integer.valueOf(res.substring(0, 2));
        dp[1] = firstSum >= 10 && firstSum <= 25 ? 2 : 1;
        for (int i = 2; i < res.length(); i++) {
            int sum = Integer.valueOf(res.substring(i - 1, i + 1));
            if (sum >= 10 && sum <= 25) {
                dp[i] = dp[i - 1] + dp[i - 2];
            } else {
                dp[i] = dp[i - 1];
            }
        }
        return dp[res.length()-1];
    }
}

MySQL数据库从入门实战课

12-31
限时福利1:购课进答疑群专享柳峰(刘运强)老师答疑服务。 限时福利2:购课后添加学习助手(微信号:csdn590),按消息提示即可领取编程大礼包! 注意:原价129的课程,最后2天限时秒杀仅需49元!! 为什么说每一个程序员都应该学习MySQL? 根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。 使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能! 【课程设计】 在本课程中,刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径,让学员少走弯路,彻底搞懂MySQL。 本课程包含3大模块:  一、基础篇: 主要以最新的MySQL8.0安装为例帮助学员解决安装与配置MySQL的问,并对MySQL8.0的新特性做一定介绍,为后续的课程展开做好环境部署。 二、SQL语言篇: 本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,学会熟练对库表进行增删改查等必备技能。 三、MySQL进阶篇: 本篇可以帮助学员更加高效的管理线上的MySQL数据库;具备MySQL的日常运维能力,语句调优、备份恢复等思路。  

Python入门到实战一卡通

06-09
<span><span><span><span> <p class="ql-long-24357476"> <span> </span> </p> <p class="ql-long-24357476"> 【课程特色】 </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">1、超强师资+体系全面+ 1 对 1 答疑+离线缓存+永久有效,无限回放</span> </p> <p class="ql-long-24357476"> 2、知识全面系统,从Python入门到逐步进阶到爬虫、数据分析、Web框架、人工智能应用 </p> <p class="ql-long-24357476"> <br> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">【优惠说明】</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">1、8大课程,250余节视频课,原价998元,今日联报立减800,仅需198元</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">2、</span>现在购课,就送价值800元的编程大礼包! </p> <p class="ql-long-24357476"> 备注:请添加微信:itxy41,按提示获取讲师答疑服务。 </p> <p> <br> </p> <p class="ql-long-24357476"> 讲师介绍:裴帅帅,前百度资深架构师,现爱奇艺算法架构师全程亲自授课。 </p> <p> <br> </p> <p class="ql-long-24357476"> 【为什么要学习这门套餐课?】 </p> <p class="ql-long-24357476"> Python无论是在web/爬虫/人工智能/大数据/机器学习/测试/运维/数据分析等等领域都有大量的应用,但是作为小白来讲,很难确定最适合自己的应用方向。 </p> <p> <br> </p> <p class="ql-long-24357476"> 在这门课程中,将带你从零入门Python,并向你讲授实战 Python 各个应用方向的核心知识点,同时应用于实战项目。 </p> <p> <br> </p> <p class="ql-long-24357476"> 【学完后我将达到什么水平?】 </p> <p class="ql-long-24357476"> 你将能够熟练掌握 Python 在人工智能时代的多种技能,具备使用 Python 编写代码完成 Web 后台开发、网络爬虫、数据分析、机器学习、推荐系统等多种项目实战的能力,掌握 Python 全栈工程师的核心能力。 </p> <p> <br> </p> <p class="ql-long-24357476"> 【课程学习路径】 </p> <p class="ql-long-24357476"> 本套课以市场就业和职位需求为核心,从 Python 入门到多领域实战,并结合 Python 全栈工程师的进阶路线,共分为八大模块,分别是:Python 基础、Python Web 开发、Python 爬虫、Numpy 数据计算、Pandas 数据分析、Python数据可视化、Tensorflow 深度学习、推荐系统实战应用模块。 </p> <p> <br> </p> <p class="ql-long-24357476"> 套餐中一共包含8门Python课程(共246讲)助你从零进阶Python全栈工程师! </p> <p class="ql-long-24357476"> 课程1:《Python零基础入门视频教程》 </p> <p class="ql-long-24357476"> 课程2:《Python爬虫从入门到实战》 </p> <p class="ql-long-24357476"> 课程3:《Python使用Flask开发Web服务》 </p> <p class="ql-long-24357476"> 课程4:《Python使用Numpy入门数据计算》 </p> <p class="ql-long-24357476"> 课程5:《Python使用Pandas入门数据分析》 </p> <p class="ql-long-24357476"> 课程6:《Python数据图表可视化》 </p> <p class="ql-long-24357476"> 课程7:《Tensorflow深度学习从入门到实战》 </p> <p class="ql-long-24357476"> 课程8:《推荐系统技术入门到实战》 </p> <p> <br> </p> <p class="ql-long-24357476"> 【面向人群】 </p> <p class="ql-long-24357476"> 1、在校计算机专业或者对软件编程感兴趣的学生; </p> <p class="ql-long-24357476"> 2、想要使用数据分析、网络爬虫提升职场竞争力升职加薪的各行各业的企业白领; </p> <p class="ql-long-24357476"> 3、想要转方向成为数据分析师、大数据开发、机器学习算法、推荐系统工程师的职场码农; </p> <p class="ql-long-24357476"> 4、准备从事人工智能、Python开发的程序员。 </p> </span> <p> <br> </p> <p class="ql-long-24357476"> <br> </p> <p> <br> </p> <p class="ql-long-24357476"> 【课程知识体系图】 </p> </span></span></span> <p> <img src="https://img-bss.csdnimg.cn/202006100818561687.png" alt=""> </p>

150讲轻松搞定Python网络爬虫

05-16
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。   从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值