题目:

给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成“a”,1翻译成“b”,……,11翻译成“1”,……,25翻译成“z”。一个数字可能有多个翻译。例如:12258有5种不同的翻译,分别是“bccfi”、“bwfi”、“bczi”、“mcfi”和“mzi”。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

链接:

剑指Offer(第2版):P231

思路标签:

  • 算法:递归动态规划

解答:

用递归自顶向下分析,用动态规划自低向上求解

  • 定义问题:当最开始的一个或者两个数字被翻译成一个字符后,我们接着翻译后面剩下的数字;
  • 用一个递归式来表示:定义f(i)表示从第i位数字开始的不同翻译的数目,那么f(i) = f(i+1) + g(i,i+1)*f(i+2);当第i位和第i+1位两位数字拼接起来的数字在10~25的范围内时,函数g(i,i+1)的值为1,否则为0。
  • 该问题使用上面的递归方法会存在很多重复子问题。所以我们使用动态规划的方法,自低向上求解问题,消除重复子问题。
class Solution {
public:int GetTranslationCount(int number) {if (number < 0)return 0;string numberInString = to_string(number);return GetTranslationCount(numberInString);}int GetTranslationCount(const string& number) {int length = number.length();int* counts = new int[length];int count = 0;for (int i = length - 1; i >= 0; i--) {count = 0;if (i < length - 1)count = counts[i + 1];elsecount = 1;if (i < length - 1) {int digit1 = number[i] - '0';int digit2 = number[i + 1] - '0';int converted = digit1 * 10 + digit2;if (converted >= 10 && converted <= 25) {if (i < length - 2)count += counts[i + 2];elsecount += 1;}}counts[i] = count;}count = counts[0];delete[] counts;return count;}};

C++相关

  • C++11 std::to_string

    • http://zh.cppreference.com/w/cpp/string/basic_string/to_string

剑指Offer-46:把数字翻译成字符串相关推荐

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

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

  2. 【算法】剑指 Offer 46. 把数字翻译成字符串

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

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

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

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

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

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

    我是小张同学,立志用更简洁的代码做更高效的表达 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 & ...

  6. 【LeetCode笔记】剑指 Offer 46. 把数字翻译成字符串(Java、字符串、动态规划、DFS)

    文章目录 题目描述 思路 && 代码 1. 动态规划做法 2. DFS 做法 二刷 打卡第六天~继续加油! 题目描述 万物皆可爬楼梯.-和爬楼梯原理很像,都是使用动态规划的做法来做~ ...

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

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

  8. Leetcode刷题笔记——剑指 Offer 46. 把数字翻译成字符串(中等)

    文章目录 题目描述 解法:动态规划 方法一:字符串遍历 复杂度分析 C++代码实现 方法二:数字求余 复杂度分析 C++代码实现 参考链接 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 ...

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

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

  10. 【剑指 Offer 46. 把数字翻译成字符串】【剑指 Offer 10- II. 青蛙跳台阶问题】【198. 打家劫舍】【动态规划】

    青蛙跳台阶,打家劫舍,字母相同编码三道题思路总结 总结我自己思路的,写的不详细,想看详细的可以跳转到我加的链接,都是力扣上同一个人写的题解,很厉害. 字符串翻译数字 字符串翻译数字 当最后一位数字单独 ...

最新文章

  1. 直方图均衡化opencv(彩色、灰度图)
  2. [译] 使用 Web3 和 Vue.js 来创建你的第一个以太坊 dAPP(第二部分)
  3. linux父子进程同步实验,Linux-父子进程的简单同步
  4. openfire(一):使用idea编译openfire4.2.3源码
  5. 使用Encog,ROME,JSoup和Google Guava进行博客分类
  6. Linux—微服务启停shell脚本编写模板
  7. 长文详解Attention、Seq2Seq与交互式匹配
  8. 从Logistic Regression 到 Neural Network
  9. CentOS7环境下MySQL升级
  10. QT添加MySQL驱动依赖
  11. MySQL卸载不干净问题
  12. 数据库SQL-测试常用查询
  13. android怎么做表格显示数据
  14. 小白学python(爬虫知识1(大体框架)
  15. java图形化界面编程之Swing
  16. 前端涨薪必读,node.js入门保姆级教程
  17. mysql utf8mb4 bin_Mysql的utf8与utf8mb4区别,utf8mb4_bin、utf8mb4_general_ci与utf8mb4_unicode_ci的选择...
  18. android创建layout,Android 创建不同的layout
  19. 2022年登高架设考试练习题及答案
  20. 记录下自己在淘宝摸索出的领红包位置

热门文章

  1. JetpackCompose Modifier常用属性介绍(1)
  2. excel sumifs多条件求和
  3. vue2.5版本源代码编译报 Could not load ..\vue\src\core/config 错误的问题 npm run dev 编译报错...
  4. html好看特效代码,教你制作漂亮的HTML代码特效贴
  5. 用python绘制用例图源代码_用Visio画UML用例图
  6. 数据分析报告怎么写(二)
  7. Scholar ID
  8. 利用WireShark分析H264码流
  9. matplotlib绘制随机漫步
  10. 电脑W ndoWs未能启动怎么办,电脑出现windows未能启动怎么办