参考:
https://www.jianshu.com/p/80e1841909b7

题目要求:
给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”…25翻译成“z”。一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi。实现一个函数,用来计算一个数字有多少种不同的翻译方法。

递推公式:
f(i) = f(i+1)+ g(i,i+1)*f(i+2) , g(i,i+1)={0,1} (1)
f(i)表示 从第 i 位开始翻译方法的个数
从这就可以看出和青蛙跳类似,一次跳1个台阶,或者两个(两个的时候要用条件判断下)

书中说的,从前往后算,会有重复计算,所以从后往前算(自下而上)(但公式(1)的计算仍然是从前往后)

#include<iostream>
#include<sstream>
#include<string>
using namespace  std;int get_ans_string(string s)
{int f2 = 1,f1 = 1, g = 0; // f2代表跳1次,剩余的情况;f1代表跳两次剩余的情况;// 每次更新的时候,当前计算出的 总的情况数,为下一次的f2;// 当前的 f2 ,为下一次 的 f1;//  cout<<"s.size(): "<<s.size()<<endl;for (int i=s.size()-2;i>=0;i--){string tmps = s.substr(i,2);int tmpint;stringstream ss;ss<<tmps;ss>>tmpint;if (tmpint>=10 && tmpint<=25)g = 1;int tmpf= f2;f2 = f2 + g*f1;f1 = tmpf;}return f2;}int get_ans_num(int n)
{if (n<0)return 0;return get_ans_string(to_string(n));}int main()
{int n;cin>>n;int ans = get_ans_num(n);// cout<<n<<endl;cout<<ans<<endl;getchar();return 0;
}

leetcode上的一道题,注意0不能被编码
由于逆向考虑有点绕,就还从前往后考虑吧
https://leetcode.com/problems/decode-ways/submissions/
https://www.cnblogs.com/grandyang/p/4313384.html
https://zhuanlan.zhihu.com/p/60238439

注意申请dp的时候,多申请一个数。
dp数组的最开始的数相等于一个““辅助”数,其值为1,
dp[i]表示前i个数,能编码的个数;
如果当前数s[i-1]为0 , 则当前数必不能拆分,由此dp[i] = 0; 否则,可以拆分,因此dp[i] = dp[i-1]
然后再判断当前数能否和前一个数组合,如果可以,那么dp[i-2]的组合情况可以和当前组合和并,即可以加上dp[i-2]

class Solution {public:int numDecodings(string s) {if (s.empty()||s[0]=='0')return 0;vector<int>dp(s.size()+1,0);dp[0] = 1;for (int i=1;i<=s.size();i++){if (s[i-1]=='0')dp[i]=0;else if (s[i-1]!='0')dp[i] = dp[i-1];if (i>=2 && (s[i-2]=='1' || (s[i-2]=='2' && s[i-1]<='6'))) dp[i] += dp[i-2];}return dp.back();}
};

把数字翻译成字符串(动态规划)相关推荐

  1. 126. Leetcode 剑指 Offer 46. 把数字翻译成字符串 (动态规划- 字符串系列)

    class Solution:def translateNum(self, num: int) -> int:nums = str(num)n = len(nums)#异常情况if n < ...

  2. 剑指 Offer 46. 把数字翻译成字符串(动态规划+回溯+递归 解法)

    剑指 Offer 46. 把数字翻译成字符串 问题描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...

  3. 【LeetCode 剑指offer刷题】动态规划与贪婪法题3:剑指Offer-46:把数字翻译成字符串

    给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成"a",1翻译成"b",--,11翻译成"1",--,25翻译成"z&qu ...

  4. 动态规划之青蛙跳台阶的应用(把数字翻译成字符串)

    剑指 Offer 46. 把数字翻译成字符串 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...

  5. 【LeetCode】剑指 Offer 46. 把数字翻译成字符串

    [LeetCode]剑指 Offer 46. 把数字翻译成字符串 文章目录 [LeetCode]剑指 Offer 46. 把数字翻译成字符串 package offer;public class So ...

  6. 【剑指Offer】个人学习笔记_46_把数字翻译成字符串

    目录 题目: [剑指 Offer 46. 把数字翻译成字符串](https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan- ...

  7. 剑指offer46. 把数字翻译成字符串

    剑指 Offer 46. 把数字翻译成字符串 难度:中等 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 ...

  8. leetcode面试题46. 把数字翻译成字符串

    leetcode面试题46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:**0 翻译成 "a" ,1 翻译成 "b",--,11 翻译 ...

  9. leetcode刷题-面试题46. 把数字翻译成字符串

    面试题46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l& ...

  10. leetcode-剑指 Offer 46. 把数字翻译成字符串

    leetcode-剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--, ...

最新文章

  1. 开源 免费 java CMS - FreeCMS-数据对象-link
  2. 《UNIX环境高级编程》--符号链接
  3. Oracle INTERVAL DAY TO SECOND数据类型
  4. 第三方控件radupload 使用方式以及报错处理
  5. Angular 动态控制 aside 标签显示和隐藏的一个例子
  6. efcore 新特性 SaveChanges Events
  7. 用python画一只可爱的皮卡丘_用python画一只可爱的皮卡丘实例
  8. 别克gl8服务器返回数据为空,老司机教学:别克GL8商务车总线控制系统故障解决...
  9. 71万买玛莎拉蒂,手续竟然全是假的:71万或打水漂
  10. springboot mysql事物_springboot如何开启数据库事务
  11. 山东建筑大学校内购物网(SdaiBuy.com )V1.2 Beta
  12. P2P网络借贷系统-核心功能-用户投标-业务解说
  13. navicat for mysql 破解版 中文免费
  14. “普通高中数学课程标准(实验)”解读
  15. latex不显示doi号
  16. 柳暗花明又一村 WiFi新应用实现3D物体成像
  17. “锟斤拷“的前世今生
  18. diy一个android手机版下载,居然设计家DIY手机版下载-居然设计家DIY 安卓版v1.3.0.5-PC6安卓网...
  19. iOS在UIButton中换行
  20. ARM学习系列 ---- RISC和CISC概述

热门文章

  1. Win10下IE无法打开网页的解决办法
  2. ipad+PDF Expert:买前生产力,买后生产力
  3. CM108AH和DP108/DP108T的区别
  4. 全球与中国光学光源市场现状及未来发展趋势
  5. 承接家谱制作-多少代都可以
  6. POJ-1392-Ouroboros Snake
  7. C++循环结构设计——韩信点兵
  8. 《30天自制操作系统》-day2(MAC)
  9. python箱形图各部分含义_箱形图以及python实践
  10. 七牛的管理接口不支持js端发送请求进行管理(设计到跨域问题)